@foxycape/core 1.2.3 → 1.2.4
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/dist/kernal/FileLoader.cjs +1 -1
- package/dist/kernal/FileLoader.mjs +1 -1
- package/dist/kernal/Reader.cjs +1 -1
- package/dist/kernal/Reader.mjs +1 -1
- package/dist/kernal/html/geometry.cjs +1 -1
- package/dist/kernal/html/geometry.d.ts +3 -3
- package/dist/kernal/html/geometry.mjs +22 -22
- package/dist/mediaTypes/html/DefaultHtmlSymbolMeasure.cjs +1 -1
- package/dist/mediaTypes/html/DefaultHtmlSymbolMeasure.mjs +9 -9
- package/dist/mediaTypes/html/renderer/HtmlRenderer.cjs +1 -1
- package/dist/mediaTypes/html/renderer/HtmlRenderer.mjs +7 -7
- package/dist/mediaTypes/html/renderer/document/HtmlDocument.cjs +1 -1
- package/dist/mediaTypes/html/renderer/document/HtmlDocument.mjs +22 -22
- package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.cjs +1 -1
- package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.mjs +13 -13
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.cjs +1 -1
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.mjs +39 -39
- package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.cjs +1 -1
- package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.mjs +8 -8
- package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.cjs +1 -1
- package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.mjs +8 -8
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.cjs +1 -1
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.mjs +12 -12
- package/dist/mediaTypes/html/renderer/layout/pageStripRouteChange.cjs +1 -1
- package/dist/mediaTypes/html/renderer/layout/pageStripRouteChange.mjs +10 -10
- package/dist/mediaTypes/html/renderer/location/HtmlLayoutStatePreserver.cjs +1 -1
- package/dist/mediaTypes/html/renderer/location/HtmlLayoutStatePreserver.mjs +14 -14
- package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.cjs +1 -1
- package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.d.ts +0 -1
- package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.mjs +6 -7
- package/dist/mediaTypes/html/renderer/style/html-content.cjs +4 -0
- package/dist/mediaTypes/html/renderer/style/html-content.mjs +1 -1
- package/dist/mediaTypes/pdf/fileParser/PdfFileParser.cjs +1 -1
- package/dist/mediaTypes/pdf/fileParser/PdfFileParser.mjs +7 -7
- package/dist/mediaTypes/pdf/renderer/PdfDocument.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfDocument.mjs +6 -6
- package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.mjs +7 -7
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("./common/uuid.cjs"),n=require("./EventEmitter.cjs"),r=require("./i18n/applyNamed.cjs"),i=require("./logger/LoggerFactory.cjs"),a=require("./MediaTypeRegistry.cjs"),o=require("./Options.cjs"),s=require("./pipelines/FileLoadPipeline.cjs"),c=require("./pipelines/InputFormatter.cjs"),l=require("./ReaderInfo.cjs"),u=require("./services/ServiceCollection.cjs");let d=require("js-logger");d=e.__toESM(d,1);var f=()=>({onLanguageChange:()=>()=>{},getText:(e,t,n)=>r.applyNamed(t,n),changeLanguage:async()=>{},getCurrentLanguage:()=>`en-us`,getSupportedLanguages:()=>[],dispose:async()=>{}}),p=class{constructor(e,t,r){if(this.currentExtension=``,this.currentIsLoaded=!1,this.currentIsDisposed=!1,this.currentIsCancelled=!1,this.options=Object.assign(new o.Options,e),this.version=e.version||`1.0.0`,this.readerInfo=new l.ReaderInfo(this.version,e.baseUrl,e.preventCacheHash,e.debug),this.events=new n.EventEmitter,this.locale=t.locale??f(),this.device=t.device,!this.device)throw Error(`device is required.for web browser, use WebBrowser class.`);if(this.loggerFactory=t?.loggerFactory??new i.LoggerFactory(e.debug?d.default.DEBUG:d.default.INFO),this.logger=this.loggerFactory.getLogger(this.constructor.name),this.mediaTypeRegistry=new a.MediaTypeRegistry,this.services=new u.ServiceCollection(this.locale,this.events,this.readerInfo),t)for(let e of u.CORE_SERVICE_KEYS){let n=t[e];n!==void 0&&this.services.add(e,()=>n)}this.services.registerCoreServices(),this.inputFormatter=new c.InputFormatter(this.services,this.options),this.lifecycle=r??{},this.pipeline=new s.FileLoadPipeline({inputFormatter:this.inputFormatter,mediaTypeRegistry:this.mediaTypeRegistry,services:this.services,options:this.options,events:this.events,lifecycle:this.lifecycle})}get id(){return this.instanceId||=t.getUuid(),this.instanceId}get loaded(){return this.currentIsLoaded}get disposed(){return this.currentIsDisposed}get cancelled(){return this.currentIsCancelled}get context(){return this.currentContext}get url(){return this.currentUrl}get openOptions(){return this.currentOpenOptions}get extension(){return this.currentExtension}getFileParser(){return this.fileParser}async load(e,t,n){if(this.currentIsDisposed)throw Error(`file loader is disposed.`);this.currentIsLoaded&&await this.clear(),this.currentIsDisposed=!1,this.currentIsCancelled=!1;try{await this.fileParser?.dispose(),this.fileParser=void 0;let r=await this.pipeline.load(e,t,{...n,attachContext:e=>{this.currentContext=e,this.currentOpenOptions=e.openOptions,n?.attachContext?.(e)},onAbortController:e=>{this.abortController=e,n?.onAbortController?.(e)},isCancelled:()=>this.currentIsCancelled||!!n?.isCancelled?.()});return this.applyResult(r),r}finally{this.currentIsLoaded=!0}}applyResult(e){this.currentUrl=e.url,this.currentOpenOptions=e.openOptions,this.currentExtension=e.extension,this.currentContext=e.context,this.fileParser=e.fileParser,this.abortController=e.abortController}markDisposed(){this.currentIsDisposed=!0}async dispose(){await this.lifecycle.onDisposing?.(),await this.clear(),this.currentIsDisposed=!0,await this.lifecycle.onDisposed?.()}async clear(){try{this.abortController&&(this.abortController.abort(`Cancelled`),this.abortController=void 0,this.
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("./common/uuid.cjs"),n=require("./EventEmitter.cjs"),r=require("./i18n/applyNamed.cjs"),i=require("./logger/LoggerFactory.cjs"),a=require("./MediaTypeRegistry.cjs"),o=require("./Options.cjs"),s=require("./pipelines/FileLoadPipeline.cjs"),c=require("./pipelines/InputFormatter.cjs"),l=require("./ReaderInfo.cjs"),u=require("./services/ServiceCollection.cjs");let d=require("js-logger");d=e.__toESM(d,1);var f=()=>({onLanguageChange:()=>()=>{},getText:(e,t,n)=>r.applyNamed(t,n),changeLanguage:async()=>{},getCurrentLanguage:()=>`en-us`,getSupportedLanguages:()=>[],dispose:async()=>{}}),p=class{constructor(e,t,r){if(this.currentExtension=``,this.currentIsLoaded=!1,this.currentIsDisposed=!1,this.currentIsCancelled=!1,this.options=Object.assign(new o.Options,e),this.version=e.version||`1.0.0`,this.readerInfo=new l.ReaderInfo(this.version,e.baseUrl,e.preventCacheHash,e.debug),this.events=new n.EventEmitter,this.locale=t.locale??f(),this.device=t.device,!this.device)throw Error(`device is required.for web browser, use WebBrowser class.`);if(this.loggerFactory=t?.loggerFactory??new i.LoggerFactory(e.debug?d.default.DEBUG:d.default.INFO),this.logger=this.loggerFactory.getLogger(this.constructor.name),this.mediaTypeRegistry=new a.MediaTypeRegistry,this.services=new u.ServiceCollection(this.locale,this.events,this.readerInfo),t)for(let e of u.CORE_SERVICE_KEYS){let n=t[e];n!==void 0&&this.services.add(e,()=>n)}this.services.registerCoreServices(),this.inputFormatter=new c.InputFormatter(this.services,this.options),this.lifecycle=r??{},this.pipeline=new s.FileLoadPipeline({inputFormatter:this.inputFormatter,mediaTypeRegistry:this.mediaTypeRegistry,services:this.services,options:this.options,events:this.events,lifecycle:this.lifecycle})}get id(){return this.instanceId||=t.getUuid(),this.instanceId}get loaded(){return this.currentIsLoaded}get disposed(){return this.currentIsDisposed}get cancelled(){return this.currentIsCancelled}get context(){return this.currentContext}get url(){return this.currentUrl}get openOptions(){return this.currentOpenOptions}get extension(){return this.currentExtension}getFileParser(){return this.fileParser}async load(e,t,n){if(this.currentIsDisposed)throw Error(`file loader is disposed.`);this.currentIsLoaded&&await this.clear(),this.currentIsDisposed=!1,this.currentIsCancelled=!1;try{await this.fileParser?.dispose(),this.fileParser=void 0;let r=await this.pipeline.load(e,t,{...n,attachContext:e=>{this.currentContext=e,this.currentOpenOptions=e.openOptions,n?.attachContext?.(e)},onAbortController:e=>{this.abortController=e,n?.onAbortController?.(e)},isCancelled:()=>this.currentIsCancelled||!!n?.isCancelled?.()});return this.applyResult(r),r}finally{this.currentIsLoaded=!0}}applyResult(e){this.currentUrl=e.url,this.currentOpenOptions=e.openOptions,this.currentExtension=e.extension,this.currentContext=e.context,this.fileParser=e.fileParser,this.abortController=e.abortController}markDisposed(){this.currentIsDisposed=!0}async dispose(){await this.lifecycle.onDisposing?.(),await this.clear(),this.currentIsDisposed=!0,await this.lifecycle.onDisposed?.()}async clear(){try{this.abortController&&(this.abortController.abort(`Cancelled`),this.abortController=void 0,this.currentIsCancelled=!0)}catch{}this.fileParser&&=(await this.fileParser.dispose(),void 0),this.currentUrl=void 0,this.currentOpenOptions=void 0,this.currentExtension=``,this.currentContext=void 0,this.currentIsLoaded=!1}};exports.FileLoader=p;
|
|
@@ -91,7 +91,7 @@ var f = () => ({
|
|
|
91
91
|
}
|
|
92
92
|
async clear() {
|
|
93
93
|
try {
|
|
94
|
-
this.abortController && (this.abortController.abort("Cancelled"), this.abortController = void 0, this.
|
|
94
|
+
this.abortController && (this.abortController.abort("Cancelled"), this.abortController = void 0, this.currentIsCancelled = !0);
|
|
95
95
|
} catch {}
|
|
96
96
|
this.fileParser &&= (await this.fileParser.dispose(), void 0), this.currentUrl = void 0, this.currentOpenOptions = void 0, this.currentExtension = "", this.currentContext = void 0, this.currentIsLoaded = !1;
|
|
97
97
|
}
|
package/dist/kernal/Reader.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./EventNames.cjs"),t=require("./common/data.cjs"),n=require("./common/object.cjs"),r=require("./common/uuid.cjs"),i=require("./web/BrowserCapabilities.cjs"),a=require("./common/naming.cjs"),o=require("./Options.cjs"),s=require("./OpenOptions.cjs"),c=require("./services/ServiceCollection.cjs"),l=require("./FileLoader.cjs"),u=require("./html/dom.cjs"),d=require("./hostViewport.cjs"),f=require("./html/injector.cjs"),p=require("./plugins/PluginManager.cjs"),m=require("./Theme.cjs"),h=require("./OptionsProvider.cjs");var g=class{constructor(n,r){if(this.currentIsLoaded=!1,this.currentIsDidposed=!1,this.currentIsCancelled=!1,this.loadingShowToken=0,this.isLoadingLayerVisible=!1,this.loadingShowDelayMs=1200,this.isInIframe=!1,this.getParsingText=()=>this.locale.getText(`share_parsing_text`,`Parsing...`),this.showLoading=async e=>{if(this.pendingLoadingText=e,this.isLoadingLayerVisible){await this.loading?.show(e);return}if(this.loadingDelayTimer!=null)return;let t=this.loadingShowToken;this.loadingDelayTimer=setTimeout(()=>{this.loadingDelayTimer=void 0,t===this.loadingShowToken&&(this.isLoadingLayerVisible=!0,this.loading?.show(this.pendingLoadingText))},this.loadingShowDelayMs)},this.cancelLoadingShow=()=>{this.loadingShowToken++,this.loadingDelayTimer!=null&&(clearTimeout(this.loadingDelayTimer),this.loadingDelayTimer=void 0),this.isLoadingLayerVisible=!1,this.pendingLoadingText=void 0},this.hideLoading=async()=>{this.cancelLoadingShow(),await this.loading?.hide()},this.createFileDownloadingCallback=()=>async(e,n,r)=>{if(r){await this.showLoading(this.getParsingText());return}let i=e>0?e:n,a=t.formatFileSize(n),o=t.formatFileSize(i),s=this.locale.getText(`share_loading_file_progress`,`Loading file... {loaded}/{total}`,{loaded:a,total:o});await this.showLoading(s)},this.changeTheme=async t=>{if(!t)return;this.options.themeName=t;let n=await this.getTheme(t);await this.applyTheme(n),await this.getRenderer()?.applyTheme(n),this.events.emit(e.EventNames.ThemeChange,n)},this.getTheme=async e=>{let t=await this.services.get(`themeProvider`),n;return n=t?t.getTheme(e):new m.Theme,n||=new m.Theme,n},this.applyTheme=async e=>{for(let t of m.ThemeCssKeys)this.rootContainer.style.setProperty(a.toCssVariableName(t),e[t]);if(e.vars)for(let[t,n]of Object.entries(e.vars))t&&this.rootContainer.style.setProperty(t,n);let t=m.Theme.getScrollStyles(`.${m.Theme.customScrollerClassName}`);f.injectCssContent(this.rootContainer.ownerDocument,t,!0,`custom-scroll-styles`)},this.fileLoader=new l.FileLoader(n,r,this),r)for(let e of c.UI_SERVICE_KEYS){let t=r[e];t!==void 0&&this.services.add(e,()=>t)}this.services.registerUiServices(),this.options=this.fileLoader.options,this.version=this.fileLoader.version,this.logger=this.fileLoader.loggerFactory.getLogger(this.constructor.name),this.pluginManager=new p.PluginManager(this,this.fileLoader.loggerFactory,this.services,this.version),this.optionsProvider=new h.OptionsProvider(this.events,this.options),this.events.on(e.EventNames.OptionsChange,e=>{this.rootContainer&&o.isOptionKey(e)&&this.optionsProvider.applyCssVariables(this.rootContainer)})}get id(){return this.fileLoader.id}get services(){return this.fileLoader.services.asReaderServices()}get device(){return this.fileLoader.device}get loggerFactory(){return this.fileLoader.loggerFactory}get events(){return this.fileLoader.events}get readerInfo(){return this.fileLoader.readerInfo}get mediaTypeRegistry(){return this.fileLoader.mediaTypeRegistry}get locale(){return this.fileLoader.locale}get loaded(){return this.currentIsLoaded}get disposed(){return this.currentIsDidposed}get cancelled(){return this.currentIsCancelled||this.fileLoader.cancelled}get notifier(){return this.currentNotifier}get loading(){return this.currentLoading}async reload(){if(!this.container)return;let e=this.url,t=this.container,r=this.rootContainer,i=n.deepClone(this.openOptions);await this.clear(),await this.open(e,t,r,i)}async open(t,n,r,i){if(this.currentIsDidposed)throw Error(`reader is disposed.`);if(n==null)throw Error(`container is required. Use FileLoader for headless parse-only scenarios.`);if(this.fileLoader.inputFormatter.guardUrl(t),this.currentIsLoaded&&await this.clear(),this.currentIsDidposed=!1,this.loadFail=void 0,this.currentIsCancelled=!1,this.container=n,this.rootContainer=r,this.startLoadTime=new Date,this.events.emit(e.EventNames.StartLoadResource,{reader:this,startLoadTime:this.startLoadTime}),this.readerWrapper=this.fileLoader.inputFormatter.formatReaderWrapper(n),!this.readerWrapper)throw Error(`container is invalid.`);this.rootContainer||=this.readerWrapper,this.optionsProvider.applyCssVariables(this.rootContainer);let a=await this.getTheme(this.options.themeName);await this.applyTheme(a),this.currentNotifier=await this.services.get(`notifier`,!1),this.currentLoading=await this.services.get(`loading`,!1),u.emptyElement(this.readerWrapper),this.hostViewport=d.resolveHostViewport(this.readerWrapper),this.readerWrapper.setAttribute(`data-viewport-mode`,this.hostViewport.mode),this.hostViewport.mode==`window`&&!this.readerWrapper.style.minHeight&&(this.readerWrapper.style.minHeight=this.hostViewport.height+`px`,this.readerWrapper.setAttribute(`data-fc-auto-min-height`,`true`)),await this.loading?.initialize(this.readerWrapper,{backgroundColor:`var(${m.Theme.ReaderBackground})`,textColor:`var(${m.Theme.TextMutedColor})`,iconColor:`var(${m.Theme.TextAccentColor})`}),await this.showLoading();try{await this.fileLoader.getFileParser()?.dispose();let e=Object.assign(new s.OpenOptions,i);e.fileDownloadingCallback||=this.createFileDownloadingCallback();let n=await this.fileLoader.load(t,e,{measureFilePercentage:!0,prepareContext:async({extension:e})=>(this.isInIframe=!1,await this.createReaderContainer(e),{rootContainer:this.rootContainer,readerContainer:this.readerContainer,readerWrapper:this.readerWrapper}),afterParserReady:async()=>{await this.showLoading(this.getParsingText())},onAbortController:e=>{e&&(this.abortController=e)},isCancelled:()=>this.currentIsCancelled});this.abortController=n.abortController,await this.mountRenderer(n)}catch(e){throw this.loadFail=!0,e}finally{if(this.currentIsLoaded=!0,await this.hideLoading(),this.readerWrapper){this.readerWrapper.style.removeProperty(`background`);let e=this.readerWrapper.getAttribute(`data-reader-wrapper-bg`);e&&this.readerWrapper.style.setProperty(`background`,e)}this.abortController&&=null,this.loadFail||this.events.emit(e.EventNames.ResourceLoad,{reader:this,startLoadTime:this.startLoadTime})}}async createReaderContainer(t){let n=this.options.iframeRequiredExtensions,a;if(!n.includes(t)||this.readerWrapper instanceof this.readerWrapper.ownerDocument.defaultView.window.HTMLBodyElement)this.readerContainer=f.createElement(this.readerWrapper.ownerDocument,`div`,r.getRandomId(!0),{style:this.getReaderContainerBoxStyle(t)}),this.readerWrapper.appendChild(this.readerContainer),a=this.readerContainer.ownerDocument;else{this.isInIframe=!0;let n=this.createTopIFrame();this.readerWrapper.appendChild(n),i.BrowserCapabilities.isFirefox()&&(n.srcdoc=`<!DOCTYPE html><html><head></head><body></body></html>`);let o=n.contentDocument;this.readerContainer=f.createElement(o,`div`,r.getRandomId(!0),{style:this.getReaderContainerBoxStyle(t)}),o.body.appendChild(this.readerContainer),a=o,n.contentWindow.addEventListener(`click`,t=>{this.events.emit(e.EventNames.ReaderClick,{e:t,reader:this})},!0),n.contentWindow.addEventListener(`mouseenter`,t=>{this.events.emit(e.EventNames.ReaderMouseEnter,{e:t,reader:this})},!0)}this.rootContainer.addEventListener(`click`,t=>{this.events.emit(e.EventNames.ReaderClick,{e:t,reader:this})},!0),this.rootContainer.addEventListener(`mouseenter`,t=>{this.events.emit(e.EventNames.ReaderMouseEnter,{e:t,reader:this})},!0),this.readerContainer.setAttribute(`data-role`,`readerContainer`),this.readerContainer.setAttribute(`data-viewport-mode`,this.getHostViewport().mode),await this.onContainerCreated?.(),await this.showLoading();let o=this.readerWrapper.style.getPropertyValue(`background`);o&&this.readerWrapper.setAttribute(`data-reader-wrapper-bg`,o),(await this.services.get(`wallpaperProvider`))?.changeWallpaper(this.options.wallpaperName),this.options.enableInjectResetCss&&f.injectCssContent(a,`html{touch-action:none;touch-action:pan-y;}body *{box-sizing:border-box}html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{padding:0;margin:0;}ul,ol,li{list-style:none;}i,em{font-style:normal}img{border:0;}table{border-collapse:collapse;border-spacing:0;}table td{padding:0;margin:0;}section,article,aside,header,footer,nav,dialog,figure{padding:0;margin:0;}html{text-size-adjust: 100%;}`,!1,`reader_global_style`,(e,t)=>{e.insertBefore(t,e.firstChild)}),await this.notifier.initialize(this.readerContainer)}async mountRenderer(t){this.renderer&&=(await this.renderer.dispose(),null);let n=await this.mediaTypeRegistry.createRenderer(this,t.fileParser,this.readerContainer);this.renderer=n,await this.onRenderer?.(this.renderer);let r=t.percentage,i=t.location;if(!isNaN(r)&&r<=1&&r>=0?await this.renderer.navigator.gotoPercentage(r,{from:`restore`}):await this.renderer.load(i),this.renderer.getDocuments().length==0)throw Error(`Empty File`);let a=await this.getTheme(this.options.themeName);await this.getRenderer()?.applyTheme(a),await this.onRenderered?.(this.renderer),await this.hideLoading(),this.events.emit(e.EventNames.RendererLoad,this.renderer),await this.pluginManager?.enablePlugins(t.extension)}get context(){return this.fileLoader.context}get url(){return this.fileLoader.url}get openOptions(){return this.fileLoader.openOptions}get extension(){return this.fileLoader.extension}get resourceIsUnload(){return!this.currentIsLoaded}get inIframe(){return this.isInIframe}getFileParser(){return this.fileLoader.getFileParser()}getRenderer(){return this.renderer}async goto(e){await this.getRenderer()?.navigator.goto(e)}async gotoUrl(e){await this.getRenderer()?.navigator.gotoUrl(e)}async gotoPercentage(e,t){await this.getRenderer()?.navigator.gotoPercentage(e,t)}createTopIFrame(e){let t=f.createElement(document,`iframe`,e);return i.BrowserCapabilities.isFirefox()?t.setAttribute(`src`,`javascript:`):t.setAttribute(`src`,`about:blank`),t.setAttribute(`frameborder`,`0`),t.setAttribute(`border`,`0`),t.setAttribute(`allowfullscreen`,`true`),t.setAttribute(`width`,`100%`),t.setAttribute(`height`,`100%`),t.setAttribute(`style`,`margin:0;padding:0`),t}getReaderContainer(){return this.readerContainer}getRootContainer(){return this.rootContainer}getHostViewport(){if(this.hostViewport)return this.hostViewport;let e=this.readerWrapper??this.rootContainer;return e?(this.hostViewport=d.resolveHostViewport(e),this.hostViewport):{mode:`window`,height:600,width:800,observerRoot:null,scrollElement:document.scrollingElement??document.documentElement,scrollWatchTarget:document}}refreshHostViewport(){let e=this.readerWrapper??this.rootContainer;return e?this.hostViewport?(this.hostViewport=d.refreshHostViewportSize(e,this.hostViewport),this.hostViewport):(this.hostViewport=d.resolveHostViewport(e),this.hostViewport):this.getHostViewport()}getReaderContainerBoxStyle(e){let t=this.getHostViewport(),n=`background:var(${m.Theme.ReaderBackground})`;return t.mode==`host`?`width:100%;height:100%;overflow:hidden;position:relative;${n}`:(e??``).toLowerCase().replace(/^\./,``)==`pdf`?`width:100%;height:${t.height}px;overflow:hidden;position:relative;${n}`:`width:100%;height:auto;min-height:${t.height}px;overflow:visible;position:relative;${n}`}async dispose(){await this.onDisposing?.(),await this.clear(),this.currentIsDidposed=!0,this.fileLoader.markDisposed(),await this.onDisposed?.(),this.events.emit(e.EventNames.ReaderDisposed,this)}async clear(){this.cancelLoadingShow();try{if(this.context?.id&&this.startLoadTime){let t=await this.renderer?.progressTracker.getProgress(!0);t&&this.events.emit(e.EventNames.ResourceUnload,{reader:this,id:this.context.id,startLoadTime:this.startLoadTime,progress:t})}this.abortController&&(this.abortController.abort(`Cancelled`),this.abortController=null,this.logger.info(`User cancelled task,url`,this.url),this.currentIsCancelled=!0)}catch{}await this.pluginManager?.dispose(),this.renderer&&=(await this.renderer.dispose(),null),await this.fileLoader.clear(),this.readerWrapper&&(u.emptyElement(this.readerWrapper),this.readerWrapper.getAttribute(`data-fc-auto-min-height`)==`true`&&(this.readerWrapper.style.removeProperty(`min-height`),this.readerWrapper.removeAttribute(`data-fc-auto-min-height`)),this.readerWrapper.removeAttribute(`data-viewport-mode`)),this.startLoadTime=null,this.currentIsLoaded=!1,this.events.emit(e.EventNames.ReaderCleared,this)}};exports.Reader=g;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./EventNames.cjs"),t=require("./common/data.cjs"),n=require("./common/object.cjs"),r=require("./common/uuid.cjs"),i=require("./web/BrowserCapabilities.cjs"),a=require("./common/naming.cjs"),o=require("./Options.cjs"),s=require("./OpenOptions.cjs"),c=require("./services/ServiceCollection.cjs"),l=require("./FileLoader.cjs"),u=require("./html/dom.cjs"),d=require("./hostViewport.cjs"),f=require("./html/injector.cjs"),p=require("./plugins/PluginManager.cjs"),m=require("./Theme.cjs"),h=require("./OptionsProvider.cjs");var g=class{constructor(n,r){if(this.currentIsLoaded=!1,this.currentIsDidposed=!1,this.currentIsCancelled=!1,this.loadingShowToken=0,this.isLoadingLayerVisible=!1,this.loadingShowDelayMs=1200,this.isInIframe=!1,this.getParsingText=()=>this.locale.getText(`share_parsing_text`,`Parsing...`),this.showLoading=async e=>{if(this.pendingLoadingText=e,this.isLoadingLayerVisible){await this.loading?.show(e);return}if(this.loadingDelayTimer!=null)return;let t=this.loadingShowToken;this.loadingDelayTimer=setTimeout(()=>{this.loadingDelayTimer=void 0,t===this.loadingShowToken&&(this.isLoadingLayerVisible=!0,this.loading?.show(this.pendingLoadingText))},this.loadingShowDelayMs)},this.cancelLoadingShow=()=>{this.loadingShowToken++,this.loadingDelayTimer!=null&&(clearTimeout(this.loadingDelayTimer),this.loadingDelayTimer=void 0),this.isLoadingLayerVisible=!1,this.pendingLoadingText=void 0},this.hideLoading=async()=>{this.cancelLoadingShow(),await this.loading?.hide()},this.createFileDownloadingCallback=()=>async(e,n,r)=>{if(r){await this.showLoading(this.getParsingText());return}let i=e>0?e:n,a=t.formatFileSize(n),o=t.formatFileSize(i),s=this.locale.getText(`share_loading_file_progress`,`Loading file... {loaded}/{total}`,{loaded:a,total:o});await this.showLoading(s)},this.changeTheme=async t=>{if(!t)return;this.options.themeName=t;let n=await this.getTheme(t);await this.applyTheme(n),await this.getRenderer()?.applyTheme(n),this.events.emit(e.EventNames.ThemeChange,n)},this.getTheme=async e=>{let t=await this.services.get(`themeProvider`),n;return n=t?t.getTheme(e):new m.Theme,n||=new m.Theme,n},this.applyTheme=async e=>{for(let t of m.ThemeCssKeys)this.rootContainer.style.setProperty(a.toCssVariableName(t),e[t]);if(e.vars)for(let[t,n]of Object.entries(e.vars))t&&this.rootContainer.style.setProperty(t,n);let t=m.Theme.getScrollStyles(`.${m.Theme.customScrollerClassName}`);f.injectCssContent(this.rootContainer.ownerDocument,t,!0,`custom-scroll-styles`)},this.fileLoader=new l.FileLoader(n,r,this),r)for(let e of c.UI_SERVICE_KEYS){let t=r[e];t!==void 0&&this.services.add(e,()=>t)}this.services.registerUiServices(),this.options=this.fileLoader.options,this.version=this.fileLoader.version,this.logger=this.fileLoader.loggerFactory.getLogger(this.constructor.name),this.pluginManager=new p.PluginManager(this,this.fileLoader.loggerFactory,this.services,this.version),this.optionsProvider=new h.OptionsProvider(this.events,this.options),this.events.on(e.EventNames.OptionsChange,e=>{this.rootContainer&&o.isOptionKey(e)&&this.optionsProvider.applyCssVariables(this.rootContainer)})}get id(){return this.fileLoader.id}get services(){return this.fileLoader.services.asReaderServices()}get device(){return this.fileLoader.device}get loggerFactory(){return this.fileLoader.loggerFactory}get events(){return this.fileLoader.events}get readerInfo(){return this.fileLoader.readerInfo}get mediaTypeRegistry(){return this.fileLoader.mediaTypeRegistry}get locale(){return this.fileLoader.locale}get loaded(){return this.currentIsLoaded}get disposed(){return this.currentIsDidposed}get cancelled(){return this.currentIsCancelled||this.fileLoader.cancelled}get notifier(){return this.currentNotifier}get loading(){return this.currentLoading}async reload(){if(!this.container)return;let e=this.url,t=this.container,r=this.rootContainer,i=n.deepClone(this.openOptions);await this.clear(),await this.open(e,t,r,i)}async open(t,n,r,i){if(this.currentIsDidposed)throw Error(`reader is disposed.`);if(n==null)throw Error(`container is required. Use FileLoader for headless parse-only scenarios.`);if(this.fileLoader.inputFormatter.guardUrl(t),this.currentIsLoaded&&await this.clear(),this.currentIsDidposed=!1,this.loadFail=void 0,this.currentIsCancelled=!1,this.container=n,this.rootContainer=r,this.startLoadTime=new Date,this.events.emit(e.EventNames.StartLoadResource,{reader:this,startLoadTime:this.startLoadTime}),this.readerWrapper=this.fileLoader.inputFormatter.formatReaderWrapper(n),!this.readerWrapper)throw Error(`container is invalid.`);this.rootContainer||=this.readerWrapper,this.optionsProvider.applyCssVariables(this.rootContainer);let a=await this.getTheme(this.options.themeName);await this.applyTheme(a),this.currentNotifier=await this.services.get(`notifier`,!1),this.currentLoading=await this.services.get(`loading`,!1),u.emptyElement(this.readerWrapper),this.hostViewport=d.resolveHostViewport(this.readerWrapper),this.readerWrapper.setAttribute(`data-viewport-mode`,this.hostViewport.mode),this.hostViewport.mode==`window`&&!this.readerWrapper.style.minHeight&&(this.readerWrapper.style.minHeight=this.hostViewport.height+`px`,this.readerWrapper.setAttribute(`data-fc-auto-min-height`,`true`)),await this.loading?.initialize(this.readerWrapper,{backgroundColor:`var(${m.Theme.ReaderBackground})`,textColor:`var(${m.Theme.TextMutedColor})`,iconColor:`var(${m.Theme.TextAccentColor})`}),await this.showLoading();try{await this.fileLoader.getFileParser()?.dispose();let e=Object.assign(new s.OpenOptions,i);e.fileDownloadingCallback||=this.createFileDownloadingCallback();let n=await this.fileLoader.load(t,e,{measureFilePercentage:!0,prepareContext:async({extension:e})=>(this.isInIframe=!1,await this.createReaderContainer(e),{rootContainer:this.rootContainer,readerContainer:this.readerContainer,readerWrapper:this.readerWrapper}),afterParserReady:async()=>{await this.showLoading(this.getParsingText())},onAbortController:e=>{e&&(this.abortController=e)},isCancelled:()=>this.currentIsCancelled});this.abortController=n.abortController,await this.mountRenderer(n)}catch(e){throw this.loadFail=!0,e}finally{if(this.currentIsLoaded=!0,await this.hideLoading(),this.readerWrapper){this.readerWrapper.style.removeProperty(`background`);let e=this.readerWrapper.getAttribute(`data-reader-wrapper-bg`);e&&this.readerWrapper.style.setProperty(`background`,e)}this.abortController&&=null,this.loadFail||this.events.emit(e.EventNames.ResourceLoad,{reader:this,startLoadTime:this.startLoadTime})}}async createReaderContainer(t){let n=this.options.iframeRequiredExtensions,a;if(!n.includes(t)||this.readerWrapper instanceof this.readerWrapper.ownerDocument.defaultView.window.HTMLBodyElement)this.readerContainer=f.createElement(this.readerWrapper.ownerDocument,`div`,r.getRandomId(!0),{style:this.getReaderContainerBoxStyle(t)}),this.readerWrapper.appendChild(this.readerContainer),a=this.readerContainer.ownerDocument;else{this.isInIframe=!0;let n=this.createTopIFrame();this.readerWrapper.appendChild(n),i.BrowserCapabilities.isFirefox()&&(n.srcdoc=`<!DOCTYPE html><html><head></head><body></body></html>`);let o=n.contentDocument;this.readerContainer=f.createElement(o,`div`,r.getRandomId(!0),{style:this.getReaderContainerBoxStyle(t)}),o.body.appendChild(this.readerContainer),a=o,n.contentWindow.addEventListener(`click`,t=>{this.events.emit(e.EventNames.ReaderClick,{e:t,reader:this})},!0),n.contentWindow.addEventListener(`mouseenter`,t=>{this.events.emit(e.EventNames.ReaderMouseEnter,{e:t,reader:this})},!0)}this.rootContainer.addEventListener(`click`,t=>{this.events.emit(e.EventNames.ReaderClick,{e:t,reader:this})},!0),this.rootContainer.addEventListener(`mouseenter`,t=>{this.events.emit(e.EventNames.ReaderMouseEnter,{e:t,reader:this})},!0),this.readerContainer.setAttribute(`data-role`,`readerContainer`),this.readerContainer.setAttribute(`data-viewport-mode`,this.getHostViewport().mode),await this.onContainerCreated?.(),await this.showLoading();let o=this.readerWrapper.style.getPropertyValue(`background`);o&&this.readerWrapper.setAttribute(`data-reader-wrapper-bg`,o),(await this.services.get(`wallpaperProvider`))?.changeWallpaper(this.options.wallpaperName),this.options.enableInjectResetCss&&f.injectCssContent(a,`html{touch-action:none;touch-action:pan-y;}body *{box-sizing:border-box}html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{padding:0;margin:0;}ul,ol,li{list-style:none;}i,em{font-style:normal}img{border:0;}table{border-collapse:collapse;border-spacing:0;}table td{padding:0;margin:0;}section,article,aside,header,footer,nav,dialog,figure{padding:0;margin:0;}html{text-size-adjust: 100%;}`,!1,`reader_global_style`,(e,t)=>{e.insertBefore(t,e.firstChild)}),await this.notifier.initialize(this.readerContainer)}async mountRenderer(t){this.renderer&&=(await this.renderer.dispose(),null);let n=await this.mediaTypeRegistry.createRenderer(this,t.fileParser,this.readerContainer);this.renderer=n,await this.onRenderer?.(this.renderer);let r=t.percentage,i=t.location;if(!isNaN(r)&&r<=1&&r>=0?await this.renderer.navigator.gotoPercentage(r,{from:`restore`}):await this.renderer.load(i),this.renderer.getDocuments().length==0)throw Error(`Empty File`);let a=await this.getTheme(this.options.themeName);await this.getRenderer()?.applyTheme(a),await this.onRenderered?.(this.renderer),await this.hideLoading(),this.events.emit(e.EventNames.RendererLoad,this.renderer),await this.pluginManager?.enablePlugins(t.extension)}get context(){return this.fileLoader.context}get url(){return this.fileLoader.url}get openOptions(){return this.fileLoader.openOptions}get extension(){return this.fileLoader.extension}get resourceIsUnload(){return!this.currentIsLoaded}get inIframe(){return this.isInIframe}getFileParser(){return this.fileLoader.getFileParser()}getRenderer(){return this.renderer}async goto(e){await this.getRenderer()?.navigator.goto(e)}async gotoUrl(e){await this.getRenderer()?.navigator.gotoUrl(e)}async gotoPercentage(e,t){await this.getRenderer()?.navigator.gotoPercentage(e,t)}createTopIFrame(e){let t=f.createElement(document,`iframe`,e);return i.BrowserCapabilities.isFirefox()?t.setAttribute(`src`,`javascript:`):t.setAttribute(`src`,`about:blank`),t.setAttribute(`frameborder`,`0`),t.setAttribute(`border`,`0`),t.setAttribute(`allowfullscreen`,`true`),t.setAttribute(`width`,`100%`),t.setAttribute(`height`,`100%`),t.setAttribute(`style`,`margin:0;padding:0`),t}getReaderContainer(){return this.readerContainer}getRootContainer(){return this.rootContainer}getHostViewport(){if(this.hostViewport)return this.hostViewport;let e=this.readerWrapper??this.rootContainer;return e?(this.hostViewport=d.resolveHostViewport(e),this.hostViewport):{mode:`window`,height:600,width:800,observerRoot:null,scrollElement:document.scrollingElement??document.documentElement,scrollWatchTarget:document}}refreshHostViewport(){let e=this.readerWrapper??this.rootContainer;return e?this.hostViewport?(this.hostViewport=d.refreshHostViewportSize(e,this.hostViewport),this.hostViewport):(this.hostViewport=d.resolveHostViewport(e),this.hostViewport):this.getHostViewport()}getReaderContainerBoxStyle(e){let t=this.getHostViewport(),n=`background:var(${m.Theme.ReaderBackground})`;return t.mode==`host`?`width:100%;height:100%;overflow:hidden;position:relative;${n}`:(e??``).toLowerCase().replace(/^\./,``)==`pdf`?`width:100%;height:${t.height}px;overflow:hidden;position:relative;${n}`:`width:100%;height:auto;min-height:${t.height}px;overflow:visible;position:relative;${n}`}async dispose(){await this.onDisposing?.(),await this.clear(),this.currentIsDidposed=!0,this.fileLoader.markDisposed(),await this.onDisposed?.(),this.events.emit(e.EventNames.ReaderDisposed,this)}async clear(){this.cancelLoadingShow();try{if(this.context?.id&&this.startLoadTime){let t=await this.renderer?.progressTracker.getProgress(!0);t&&this.events.emit(e.EventNames.ResourceUnload,{reader:this,id:this.context.id,startLoadTime:this.startLoadTime,progress:t})}this.abortController&&(this.abortController.abort(`Cancelled`),this.abortController=null,this.currentIsCancelled=!0)}catch{}await this.pluginManager?.dispose(),this.renderer&&=(await this.renderer.dispose(),null),await this.fileLoader.clear(),this.readerWrapper&&(u.emptyElement(this.readerWrapper),this.readerWrapper.getAttribute(`data-fc-auto-min-height`)==`true`&&(this.readerWrapper.style.removeProperty(`min-height`),this.readerWrapper.removeAttribute(`data-fc-auto-min-height`)),this.readerWrapper.removeAttribute(`data-viewport-mode`)),this.startLoadTime=null,this.currentIsLoaded=!1,this.events.emit(e.EventNames.ReaderCleared,this)}};exports.Reader=g;
|
package/dist/kernal/Reader.mjs
CHANGED
|
@@ -277,7 +277,7 @@ var y = class {
|
|
|
277
277
|
progress: t
|
|
278
278
|
});
|
|
279
279
|
}
|
|
280
|
-
this.abortController && (this.abortController.abort("Cancelled"), this.abortController = null, this.
|
|
280
|
+
this.abortController && (this.abortController.abort("Cancelled"), this.abortController = null, this.currentIsCancelled = !0);
|
|
281
281
|
} catch {}
|
|
282
282
|
await this.pluginManager?.dispose(), this.renderer &&= (await this.renderer.dispose(), null), await this.fileLoader.clear(), this.readerWrapper && (u(this.readerWrapper), this.readerWrapper.getAttribute("data-fc-auto-min-height") == "true" && (this.readerWrapper.style.removeProperty("min-height"), this.readerWrapper.removeAttribute("data-fc-auto-min-height")), this.readerWrapper.removeAttribute("data-viewport-mode")), this.startLoadTime = null, this.currentIsLoaded = !1, this.events.emit(e.ReaderCleared, this);
|
|
283
283
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./finder.cjs"),t=require("./selection.cjs");var n=e=>!!e&&typeof e==`object`&&!(`tagName`in e)&&`commonAncestorContainer`in e,r=e=>{let t=e.getClientRects();for(let e=0;e<t.length;e++){let n=t[e];if(n.height>0||n.width>0)return n}return e.getBoundingClientRect()},i=e=>n(e)?r(e):e.getBoundingClientRect(),a=e=>{if(!n(e))return e;let t=e.startContainer;return t.nodeType===Node.ELEMENT_NODE?t:t.parentElement},o=t=>{let n,r,i,a=[],o,s,c;if(Array.isArray(t)){if(c=`elements`,o=t[0],s=t[t.length-1],n=o.ownerDocument,r=n.defaultView,t.length>1){let n=r.document.createRange();n.setStart(o,0);let s=t[t.length-1],c=e.findLastNode(s);c.nodeType==Node.TEXT_NODE?n.setEnd(c,c.textContent.length):n.setEnd(c,0);let l=n.getBoundingClientRect();i={left:l.left,top:l.top,width:l.width,height:l.height,right:l.right,bottom:l.bottom};for(let e of t){let t=e.getClientRects();a.push(...Array.from(t).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom})))}}else i=t[0].getBoundingClientRect(),a=Array.from(t[0].getClientRects()).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom}))}else Object.prototype.hasOwnProperty.call(t,`tagName`)||t.tagName?(c=`element`,o=t,s=o,n=o.ownerDocument,r=n.defaultView,i=t.getBoundingClientRect(),a=Array.from(t.getClientRects()).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom}))):(c=`range`,o=t.startContainer,s=t.endContainer,n=o.ownerDocument,r=n.defaultView,i=t.getBoundingClientRect(),a=Array.from(t.getClientRects()).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom})));return{firstBaseNode:o,lastBaseNode:s,baseWindow:r,baseDocument:n,baseBoundingRect:i,baseType:c,baseRects:a}},s={left:-1e5,top:-1e5,visible:!1},c=(e,t)=>{let n=e.target?.ownerDocument;if(!n)return s;let r=n.defaultView,i=e.clientX,a=e.clientY,o=t.ownerDocument.defaultView;for(;o!=r;){let e=r?.frameElement,t=e?.ownerDocument?.defaultView;if(!t)break;r=t;let n=e.getBoundingClientRect();i+=n.left,a+=n.top}return o==r?{left:i,top:a,visible:!0}:s},l=(e,t)=>{let n=e.left+e.width,r=e.top+e.height,i=t.left+t.width,a=t.top+t.height;return t.left>=e.left&&t.top>=e.top&&i<=n&&a<=r},u=(e,t)=>{let n=e.left+e.width,r=e.top+e.height,i=t.left+t.width,a=t.top+t.height,o=Math.max(e.left,t.left),s=Math.max(e.top,t.top),c=Math.min(n,i),l=Math.min(r,a),u=c-o,d=l-s;return u<=0||d<=0?null:{left:o,top:s,width:u,height:d}},d=e=>e.reduce((e,t)=>{let n=Math.min(e.left,t.left),r=Math.min(e.top,t.top),i=Math.max(e.left+e.width,t.left+t.width),a=Math.max(e.top+e.height,t.top+t.height);return{left:n,top:r,width:i-n,height:a-r}}),f=(e,t)=>{let{baseWindow:n,baseRects:r}=o(e),i=r.map(e=>({left:e.left,top:e.top,width:e.width,height:e.height}));for(;t!=n;){let e=n?.frameElement,t=e?.ownerDocument?.defaultView;if(!t)break;n=t;let r=e.getBoundingClientRect();i.forEach(e=>{e.left+=r.left,e.top+=r.top})}return t==n?{normalizedRects:i,inSameWindow:!0}:{normalizedRects:[],inSameWindow:!1}},p=e=>e.width*e.height,m=e=>{let t=e[0],n=p(t);for(let r=1;r<e.length;r++){let i=p(e[r]);i>n&&(t=e[r],n=i)}return t},h=e=>{if(e.length===1)return e[0];let t=d(e),n=Math.max(...e.map(e=>e.width));return t.width>n*2+24?m(e):t},g=(e,t,n=!0)=>{let r=e.filter(e=>e.width>=1&&e.height>=1),i=r.filter(e=>l(t,e));if(i.length>0)return h(i);if(!n)return null;let a=[];for(let e of r){let n=u(t,e);n&&(n.width*n.height<4||a.push({clipped:n,origArea:e.width*e.height}))}return a.length===0?null:(a.sort((e,t)=>{let n=e.clipped.width*e.clipped.height,r=t.clipped.width*t.clipped.height;return r===n?t.origArea-e.origArea:r-n}),a[0].clipped)},_=e=>({left:e.left,top:e.top,width:e.width,height:e.height}),v=(e,t)=>t?{left:e.left+(t.left??0),top:e.top+(t.top??0),width:e.width-(t.left??0)-(t.right??0),height:e.height-(t.top??0)-(t.bottom??0)}:e,y=(e,t,n)=>n<t?t:Math.min(Math.max(e,t),n),b=(e,t,n,r=`bottom`,i=5)=>{let a=n.getBoundingClientRect(),o=a.width,c=a.height;if(o<1||c<1)return s;let l=t.left+t.width,u=t.top+t.height,d=e.top+e.height,f=d-u,p=t.top-e.top,m=c+i,h=e.left,g=e.left+e.width,_=e.top,v=h+i,b=g-o-i,x=_+i,S=d-c-i;if(r===`right`)return{left:y(l+i,v,b),top:y(t.top+t.height/2-c/2,x,S),visible:!0};let C=y(t.left+t.width/2-o/2,v,b),w=r===`top`,T;return T=f>=m&&p>=m?w?t.top-c-i:u+i:f>=m?u+i:p>=m?t.top-c-i:t.top+t.height/2-c/2,{left:C,top:y(T,x,S),visible:!0}},x=(e,t,n,r,i)=>{if(!n||!t)return s;let a=n.ownerDocument.defaultView,o=f(t,a);if(!o?.inSameWindow)return s;let c=v(_(e.getBoundingClientRect()),i),l=g(o.normalizedRects,c,!0);return l?{...b(c,l,n,r??`bottom`),baseRect:l}:s},S=(e,t,n,r)=>{if(!t)return s;let i=f(t,n);if(!i?.inSameWindow)return s;let a=i.normalizedRects,o=v(_(e.getBoundingClientRect()),r);(r?.left!=null||r?.right!=null||r?.top!=null||r?.bottom!=null)&&(a=a.map(e=>({left:e.left+(r?.left??0),top:e.top+(r?.top??0),width:e.width-(r?.left??0)-(r?.right??0),height:e.height-(r?.top??0)-(r?.bottom??0)})));let c=g(a,o,!1);return c?{left:c.left,top:c.top,visible:!0}:s},C=(e,t,n,r)=>{let i=r.innerWidth,a=r.innerHeight;if(e.left<0||Math.floor(e.right)>i){if(e.left>=0){let n=(t.nodeType==Node.ELEMENT_NODE?t.getClientRects():t.parentElement.getClientRects())[0],r=i-n.left,o=a-n.top;e={left:n.left,top:n.top,width:r,height:o,right:n.left+r,bottom:n.top+o}}else{let t=n.nodeType==Node.ELEMENT_NODE?n.getClientRects():n.parentElement.getClientRects(),r=t[t.length-1],o=Math.floor(e.width+e.left);if(o<i||o==i&&r.bottom<a){let n=r.right,i=r.left,a=r.top;for(let e=0;e<t.length;e++){if(t[e].left<0)continue;let r=t[e];n<r.width&&(n=r.width),i>r.left&&(i=r.left),a>r.top&&(a=r.top)}let o=n,s=r.bottom;e={left:i,top:a,width:o,height:s,right:i+o,bottom:a+s}}else e={left:0,top:0,width:i,height:a,right:i,bottom:a}}}return e},w={top:8,bottom:8,left:8,right:8},T=(e,t,n,r,i,a=w)=>{if(!n||!t)return s;let c=r??`bottom`;if(i==`page`){let{baseWindow:r,baseBoundingRect:i}=o(t),l=r.innerWidth,u=r.innerHeight,d=Math.round(i.left);return i.right<0||d>l||i.bottom<0||i.top>u?s:x(e,t,n,c,a)}return x(e,t,n,c,a)},E=(e,t)=>t.left>=e.left&&t.top>=e.top&&t.right<=e.right&&t.bottom<=e.bottom,D=(e,t)=>t.right>e.left&&t.left<e.right&&t.top<e.bottom&&t.bottom>e.top,O=e=>e==`vertical-lr`||e==`vertical-rl`,k=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom}),A=(e,t,n)=>O(n)?n==`vertical-rl`?e.left>=t.right||e.bottom<=t.top:e.right<=t.left||e.bottom<=t.top:e.bottom<=t.top||e.right<=t.left,j=(e,t,n)=>O(n)?n==`vertical-rl`?e.right<=t.left||e.top>=t.bottom:e.left>=t.right||e.top>=t.bottom:e.top>=t.bottom||e.left>=t.right,M=(e,t)=>{let n={left:0,top:0,right:e.innerWidth,bottom:e.innerHeight},r=e.frameElement,i=r?.ownerDocument?.defaultView;if(r&&i){let e=r.getBoundingClientRect(),t={left:0,top:0,right:i.innerWidth,bottom:i.innerHeight},a=Math.max(e.left,t.left),o=Math.max(e.top,t.top),s=Math.min(e.right,t.right),c=Math.min(e.bottom,t.bottom);if(s<=a||c<=o)return null;n={left:a-e.left,top:o-e.top,right:s-e.left,bottom:c-e.top}}let a=n.left+(t?.leftInset??0),o=n.top+(t?.topInset??0),s=n.right-(t?.rightInset??0),c=n.bottom-(t?.bottomInset??0);return s<=a||c<=o?null:{left:a,top:o,right:s,bottom:c}},N=(e,t,n)=>{if(!e.length)return[];let r=n?.writingMode,i=n?.fullVisible??!1,a=n?.missStreakToStop??8,o=e=>i?E(t,e):D(t,e),s=0,c=e.length;for(;s<c;){let n=s+c>>1;A(k(e[n].getBoundingClientRect()),t,r)?s=n+1:c=n}let l=[],u=0,d=!1;for(let n=s;n<e.length;n++){let i=k(e[n].getBoundingClientRect());if(o(i)){l.push(e[n]),d=!0,u=0;continue}if(d&&j(i,t,r)&&(u++,u>=a))break}return l},P=(e,t,n)=>{if(e.caretRangeFromPoint)return e.caretRangeFromPoint(t,n);if(e.caretPositionFromPoint){let r=e.caretPositionFromPoint(t,n);if(r){let t=e.createRange();return t.setStart(r.offsetNode,r.offset),t.setEnd(r.offsetNode,r.offset),t}}return null},F=new Set([`img`,`image`,`svg`,`video`,`audio`,`canvas`,`iframe`]),I=e=>{let t=e.textContent??``;for(let e=0;e<t.length;e++){let n=t.charCodeAt(e);if(n!=32&&n!=9&&n!=10&&n!=13&&n!=160)return!0}return!1},L=e=>{let t=e.tagName?.toLowerCase();return t&&F.has(t)?!0:!I(e)},R=(e,t)=>t==`vertical-rl`?{x:Math.max(e.left,e.right-1),y:e.top+1}:{x:e.left+1,y:e.top+1},z=e=>e.width===0&&e.height===0,B=(e,t)=>e===t||e.contains(t),V=(e,t,n)=>{if(z(e))return!1;let r=k(e);return D(t,r)&&!A(r,t,n)},H=(e,t,n)=>{let r=e.getClientRects();for(let e=0;e<r.length;e++){let i=r[e];if(V(i,t,n))return i}},U=(e,n,r,i,a)=>{let o=Math.min(n+1,r);if(n<0||n>=r)return;let s=t.createRange(e,e,n,o);if(!s)return;let c=H(s,i,a);if(c)return{textOffset:n,rect:c}},W=(e,n,i,a,o)=>{let s=Math.min(n+1,i),c=t.createRange(e,e,n,s);if(!c)return!0;let l=r(c);return z(l)||A(k(l),a,o)},G=(e,n,r)=>{if(L(e))return;let i=e.textContent?.length??0;if(i<=0)return;let a=e.ownerDocument;if(!a)return;let o=R(n,r),s=P(a,o.x,o.y);if(s&&B(e,s.startContainer)){let a=U(e,t.getTextOffsetInElement(e,s.startContainer,s.startOffset),i,n,r);if(a)return a}let c=0,l=i-1,u;for(;c<=l;){let t=c+l>>1,a=U(e,t,i,n,r);if(a){u=a,l=t-1;continue}if(W(e,t,i,n,r)){c=t+1;continue}l=t-1}return u},K=e=>{let t=e.getClientRects();if(t.length===0)return null;let n;for(let e=t.length-1;e>=0;e--)if(t[e].height>0){n=t[e];break}if(!n)return null;let r=e.startContainer.ownerDocument,i=P(r,n.left,n.top),a=P(r,n.right-1,n.bottom-1);if(!i||!a)return null;let o=r.createRange();return o.setStart(i.startContainer,i.startOffset),o.setEnd(a.startContainer,a.startOffset),o};exports.DEFAULT_TOOLBAR_CONTAINER_INSET=w,exports.applyContainerInset=v,exports.calcCursorPosition=c,exports.calcToolbarPosition=T,exports.calcToolbarPositionFromRect=b,exports.calcToolbarPositionInContainer=x,exports.checkRangeOrElementIsVisible=S,exports.containsRect=E,exports.findFirstVisibleTextOffset=G,exports.getBaseState=o,exports.getFirstClientRect=r,exports.getLastLineRangeFromElementRange=K,exports.getLocateClientRect=i,exports.getLocateElement=a,exports.getOrderedElementsIntersectingRect=N,exports.getRangeFromPoint=P,exports.hiddenToolbarPosition=s,exports.intersectRect=D,exports.intersectWithContainer=u,exports.isDomRange=n,exports.isUnsplittableContentElement=L,exports.normalizeBaseRectsInDisplayWindow=f,exports.recalculateRect=C,exports.resolveVisibleBaseRectInContainer=g,exports.resolveVisibleViewportInContentWindow=M,exports.toRect=_;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./finder.cjs"),t=require("./selection.cjs");var n=e=>!!e&&typeof e==`object`&&!(`tagName`in e)&&`commonAncestorContainer`in e,r=e=>{let t=e.getClientRects();for(let e=0;e<t.length;e++){let n=t[e];if(n.height>0||n.width>0)return n}return e.getBoundingClientRect()},i=e=>n(e)?r(e):e.getBoundingClientRect(),a=e=>{if(!n(e))return e;let t=e.startContainer;return t.nodeType===Node.ELEMENT_NODE?t:t.parentElement},o=t=>{let n,r,i,a=[],o,s,c;if(Array.isArray(t)){if(c=`elements`,o=t[0],s=t[t.length-1],n=o.ownerDocument,r=n.defaultView,t.length>1){let n=r.document.createRange();n.setStart(o,0);let s=t[t.length-1],c=e.findLastNode(s);c.nodeType==Node.TEXT_NODE?n.setEnd(c,c.textContent.length):n.setEnd(c,0);let l=n.getBoundingClientRect();i={left:l.left,top:l.top,width:l.width,height:l.height,right:l.right,bottom:l.bottom};for(let e of t){let t=e.getClientRects();a.push(...Array.from(t).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom})))}}else i=t[0].getBoundingClientRect(),a=Array.from(t[0].getClientRects()).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom}))}else Object.prototype.hasOwnProperty.call(t,`tagName`)||t.tagName?(c=`element`,o=t,s=o,n=o.ownerDocument,r=n.defaultView,i=t.getBoundingClientRect(),a=Array.from(t.getClientRects()).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom}))):(c=`range`,o=t.startContainer,s=t.endContainer,n=o.ownerDocument,r=n.defaultView,i=t.getBoundingClientRect(),a=Array.from(t.getClientRects()).map(e=>({left:e.left,top:e.top,width:e.width,height:e.height,right:e.right,bottom:e.bottom})));return{firstBaseNode:o,lastBaseNode:s,baseWindow:r,baseDocument:n,baseBoundingRect:i,baseType:c,baseRects:a}},s={left:-1e5,top:-1e5,visible:!1},c=(e,t)=>{let n=e.target?.ownerDocument;if(!n)return s;let r=n.defaultView,i=e.clientX,a=e.clientY,o=t.ownerDocument.defaultView;for(;o!=r;){let e=r?.frameElement,t=e?.ownerDocument?.defaultView;if(!t)break;r=t;let n=e.getBoundingClientRect();i+=n.left,a+=n.top}return o==r?{left:i,top:a,visible:!0}:s},l=(e,t)=>{let n=e.left+e.width,r=e.top+e.height,i=t.left+t.width,a=t.top+t.height;return t.left>=e.left&&t.top>=e.top&&i<=n&&a<=r},u=(e,t)=>{let n=e.left+e.width,r=e.top+e.height,i=t.left+t.width,a=t.top+t.height,o=Math.max(e.left,t.left),s=Math.max(e.top,t.top),c=Math.min(n,i),l=Math.min(r,a),u=c-o,d=l-s;return u<=0||d<=0?null:{left:o,top:s,width:u,height:d}},d=e=>e.reduce((e,t)=>{let n=Math.min(e.left,t.left),r=Math.min(e.top,t.top),i=Math.max(e.left+e.width,t.left+t.width),a=Math.max(e.top+e.height,t.top+t.height);return{left:n,top:r,width:i-n,height:a-r}}),f=(e,t)=>{let{baseWindow:n,baseRects:r}=o(e),i=r.map(e=>({left:e.left,top:e.top,width:e.width,height:e.height}));for(;t!=n;){let e=n?.frameElement,t=e?.ownerDocument?.defaultView;if(!t)break;n=t;let r=e.getBoundingClientRect();i.forEach(e=>{e.left+=r.left,e.top+=r.top})}return t==n?{normalizedRects:i,inSameWindow:!0}:{normalizedRects:[],inSameWindow:!1}},p=e=>e.width*e.height,m=e=>{let t=e[0],n=p(t);for(let r=1;r<e.length;r++){let i=p(e[r]);i>n&&(t=e[r],n=i)}return t},h=e=>{if(e.length===1)return e[0];let t=d(e),n=Math.max(...e.map(e=>e.width));return t.width>n*2+24?m(e):t},g=(e,t,n=!0)=>{let r=e.filter(e=>e.width>=1&&e.height>=1),i=r.filter(e=>l(t,e));if(i.length>0)return h(i);if(!n)return null;let a=[];for(let e of r){let n=u(t,e);n&&(n.width*n.height<4||a.push({clipped:n,origArea:e.width*e.height}))}return a.length===0?null:(a.sort((e,t)=>{let n=e.clipped.width*e.clipped.height,r=t.clipped.width*t.clipped.height;return r===n?t.origArea-e.origArea:r-n}),a[0].clipped)},_=e=>({left:e.left,top:e.top,width:e.width,height:e.height}),v=(e,t)=>t?{left:e.left+(t.left??0),top:e.top+(t.top??0),width:e.width-(t.left??0)-(t.right??0),height:e.height-(t.top??0)-(t.bottom??0)}:e,y=(e,t,n)=>n<t?t:Math.min(Math.max(e,t),n),b=(e,t,n,r=`bottom`,i=5,a=0)=>{let o=n.getBoundingClientRect(),c=o.width,l=o.height;if(c<1||l<1)return s;let u=t.left+t.width,d=t.top+t.height,f=e.top+e.height,p=f-d,m=t.top-e.top,h=i+a,g=l+h,_=l+i,v=e.left,b=e.left+e.width,x=e.top,S=v+i,C=b-c-i,w=x+i,T=f-l-i;if(r===`right`)return{left:y(u+i,S,C),top:y(t.top+t.height/2-l/2,w,T),visible:!0};let E=y(t.left+t.width/2-c/2,S,C),D=r===`top`,O;return O=p>=g&&m>=_?D?t.top-l-i:d+h:p>=g?d+h:m>=_?t.top-l-i:t.top+t.height/2-l/2,{left:E,top:y(O,w,T),visible:!0}},x=(e,t,n,r,i,a=0)=>{if(!n||!t)return s;let o=n.ownerDocument.defaultView,c=f(t,o);if(!c?.inSameWindow)return s;let l=v(_(e.getBoundingClientRect()),i),u=g(c.normalizedRects,l,!0);return u?{...b(l,u,n,r??`bottom`,void 0,a),baseRect:u}:s},S=(e,t,n,r)=>{if(!t)return s;let i=f(t,n);if(!i?.inSameWindow)return s;let a=i.normalizedRects,o=v(_(e.getBoundingClientRect()),r);(r?.left!=null||r?.right!=null||r?.top!=null||r?.bottom!=null)&&(a=a.map(e=>({left:e.left+(r?.left??0),top:e.top+(r?.top??0),width:e.width-(r?.left??0)-(r?.right??0),height:e.height-(r?.top??0)-(r?.bottom??0)})));let c=g(a,o,!1);return c?{left:c.left,top:c.top,visible:!0}:s},C=(e,t,n,r)=>{let i=r.innerWidth,a=r.innerHeight;if(e.left<0||Math.floor(e.right)>i){if(e.left>=0){let n=(t.nodeType==Node.ELEMENT_NODE?t.getClientRects():t.parentElement.getClientRects())[0],r=i-n.left,o=a-n.top;e={left:n.left,top:n.top,width:r,height:o,right:n.left+r,bottom:n.top+o}}else{let t=n.nodeType==Node.ELEMENT_NODE?n.getClientRects():n.parentElement.getClientRects(),r=t[t.length-1],o=Math.floor(e.width+e.left);if(o<i||o==i&&r.bottom<a){let n=r.right,i=r.left,a=r.top;for(let e=0;e<t.length;e++){if(t[e].left<0)continue;let r=t[e];n<r.width&&(n=r.width),i>r.left&&(i=r.left),a>r.top&&(a=r.top)}let o=n,s=r.bottom;e={left:i,top:a,width:o,height:s,right:i+o,bottom:a+s}}else e={left:0,top:0,width:i,height:a,right:i,bottom:a}}}return e},w={top:8,bottom:8,left:8,right:8},T=(e,t,n,r,i,a=w,c=0)=>{if(!n||!t)return s;let l=r??`bottom`;if(i==`page`){let{baseWindow:r,baseBoundingRect:i}=o(t),u=r.innerWidth,d=r.innerHeight,f=Math.round(i.left);return i.right<0||f>u||i.bottom<0||i.top>d?s:x(e,t,n,l,a,c)}return x(e,t,n,l,a,c)},E=(e,t)=>t.left>=e.left&&t.top>=e.top&&t.right<=e.right&&t.bottom<=e.bottom,D=(e,t)=>t.right>e.left&&t.left<e.right&&t.top<e.bottom&&t.bottom>e.top,O=e=>e==`vertical-lr`||e==`vertical-rl`,k=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom}),A=(e,t,n)=>O(n)?n==`vertical-rl`?e.left>=t.right||e.bottom<=t.top:e.right<=t.left||e.bottom<=t.top:e.bottom<=t.top||e.right<=t.left,j=(e,t,n)=>O(n)?n==`vertical-rl`?e.right<=t.left||e.top>=t.bottom:e.left>=t.right||e.top>=t.bottom:e.top>=t.bottom||e.left>=t.right,M=(e,t)=>{let n={left:0,top:0,right:e.innerWidth,bottom:e.innerHeight},r=e.frameElement,i=r?.ownerDocument?.defaultView;if(r&&i){let e=r.getBoundingClientRect(),t={left:0,top:0,right:i.innerWidth,bottom:i.innerHeight},a=Math.max(e.left,t.left),o=Math.max(e.top,t.top),s=Math.min(e.right,t.right),c=Math.min(e.bottom,t.bottom);if(s<=a||c<=o)return null;n={left:a-e.left,top:o-e.top,right:s-e.left,bottom:c-e.top}}let a=n.left+(t?.leftInset??0),o=n.top+(t?.topInset??0),s=n.right-(t?.rightInset??0),c=n.bottom-(t?.bottomInset??0);return s<=a||c<=o?null:{left:a,top:o,right:s,bottom:c}},N=(e,t,n)=>{if(!e.length)return[];let r=n?.writingMode,i=n?.fullVisible??!1,a=n?.missStreakToStop??8,o=e=>i?E(t,e):D(t,e),s=0,c=e.length;for(;s<c;){let n=s+c>>1;A(k(e[n].getBoundingClientRect()),t,r)?s=n+1:c=n}let l=[],u=0,d=!1;for(let n=s;n<e.length;n++){let i=k(e[n].getBoundingClientRect());if(o(i)){l.push(e[n]),d=!0,u=0;continue}if(d&&j(i,t,r)&&(u++,u>=a))break}return l},P=(e,t,n)=>{if(e.caretRangeFromPoint)return e.caretRangeFromPoint(t,n);if(e.caretPositionFromPoint){let r=e.caretPositionFromPoint(t,n);if(r){let t=e.createRange();return t.setStart(r.offsetNode,r.offset),t.setEnd(r.offsetNode,r.offset),t}}return null},F=new Set([`img`,`image`,`svg`,`video`,`audio`,`canvas`,`iframe`]),I=e=>{let t=e.textContent??``;for(let e=0;e<t.length;e++){let n=t.charCodeAt(e);if(n!=32&&n!=9&&n!=10&&n!=13&&n!=160)return!0}return!1},L=e=>{let t=e.tagName?.toLowerCase();return t&&F.has(t)?!0:!I(e)},R=(e,t)=>t==`vertical-rl`?{x:Math.max(e.left,e.right-1),y:e.top+1}:{x:e.left+1,y:e.top+1},z=e=>e.width===0&&e.height===0,B=(e,t)=>e===t||e.contains(t),V=(e,t,n)=>{if(z(e))return!1;let r=k(e);return D(t,r)&&!A(r,t,n)},H=(e,t,n)=>{let r=e.getClientRects();for(let e=0;e<r.length;e++){let i=r[e];if(V(i,t,n))return i}},U=(e,n,r,i,a)=>{let o=Math.min(n+1,r);if(n<0||n>=r)return;let s=t.createRange(e,e,n,o);if(!s)return;let c=H(s,i,a);if(c)return{textOffset:n,rect:c}},W=(e,n,i,a,o)=>{let s=Math.min(n+1,i),c=t.createRange(e,e,n,s);if(!c)return!0;let l=r(c);return z(l)||A(k(l),a,o)},G=(e,n,r)=>{if(L(e))return;let i=e.textContent?.length??0;if(i<=0)return;let a=e.ownerDocument;if(!a)return;let o=R(n,r),s=P(a,o.x,o.y);if(s&&B(e,s.startContainer)){let a=U(e,t.getTextOffsetInElement(e,s.startContainer,s.startOffset),i,n,r);if(a)return a}let c=0,l=i-1,u;for(;c<=l;){let t=c+l>>1,a=U(e,t,i,n,r);if(a){u=a,l=t-1;continue}if(W(e,t,i,n,r)){c=t+1;continue}l=t-1}return u},K=e=>{let t=e.getClientRects();if(t.length===0)return null;let n;for(let e=t.length-1;e>=0;e--)if(t[e].height>0){n=t[e];break}if(!n)return null;let r=e.startContainer.ownerDocument,i=P(r,n.left,n.top),a=P(r,n.right-1,n.bottom-1);if(!i||!a)return null;let o=r.createRange();return o.setStart(i.startContainer,i.startOffset),o.setEnd(a.startContainer,a.startOffset),o};exports.DEFAULT_TOOLBAR_CONTAINER_INSET=w,exports.applyContainerInset=v,exports.calcCursorPosition=c,exports.calcToolbarPosition=T,exports.calcToolbarPositionFromRect=b,exports.calcToolbarPositionInContainer=x,exports.checkRangeOrElementIsVisible=S,exports.containsRect=E,exports.findFirstVisibleTextOffset=G,exports.getBaseState=o,exports.getFirstClientRect=r,exports.getLastLineRangeFromElementRange=K,exports.getLocateClientRect=i,exports.getLocateElement=a,exports.getOrderedElementsIntersectingRect=N,exports.getRangeFromPoint=P,exports.hiddenToolbarPosition=s,exports.intersectRect=D,exports.intersectWithContainer=u,exports.isDomRange=n,exports.isUnsplittableContentElement=L,exports.normalizeBaseRectsInDisplayWindow=f,exports.recalculateRect=C,exports.resolveVisibleBaseRectInContainer=g,exports.resolveVisibleViewportInContentWindow=M,exports.toRect=_;
|
|
@@ -69,7 +69,7 @@ export declare const applyContainerInset: (containerRect: Rect, inset?: {
|
|
|
69
69
|
right?: number;
|
|
70
70
|
}) => Rect;
|
|
71
71
|
export type ToolbarPreferPosition = "top" | "bottom" | "right";
|
|
72
|
-
export declare const calcToolbarPositionFromRect: (containerRect: Rect, baseRect: Rect, displayElement: Element, toolbarPreferPosition?: ToolbarPreferPosition, bias?: number) => {
|
|
72
|
+
export declare const calcToolbarPositionFromRect: (containerRect: Rect, baseRect: Rect, displayElement: Element, toolbarPreferPosition?: ToolbarPreferPosition, bias?: number, belowClearance?: number) => {
|
|
73
73
|
left: number;
|
|
74
74
|
top: number;
|
|
75
75
|
visible: boolean;
|
|
@@ -79,7 +79,7 @@ export declare const calcToolbarPositionInContainer: (containerElement: HTMLElem
|
|
|
79
79
|
bottom?: number;
|
|
80
80
|
left?: number;
|
|
81
81
|
right?: number;
|
|
82
|
-
}) => {
|
|
82
|
+
}, belowClearance?: number) => {
|
|
83
83
|
left: number;
|
|
84
84
|
top: number;
|
|
85
85
|
visible: boolean;
|
|
@@ -117,7 +117,7 @@ export type ToolbarContainerInset = {
|
|
|
117
117
|
right?: number;
|
|
118
118
|
};
|
|
119
119
|
export declare const DEFAULT_TOOLBAR_CONTAINER_INSET: ToolbarContainerInset;
|
|
120
|
-
export declare const calcToolbarPosition: (ownerPanel: HTMLElement, base: Range | Element[] | Element, displayElement: Element, toolbarPreferPosition?: ToolbarPreferPosition, flipMode?: FlipMode, containerInset?: ToolbarContainerInset) => {
|
|
120
|
+
export declare const calcToolbarPosition: (ownerPanel: HTMLElement, base: Range | Element[] | Element, displayElement: Element, toolbarPreferPosition?: ToolbarPreferPosition, flipMode?: FlipMode, containerInset?: ToolbarContainerInset, belowClearance?: number) => {
|
|
121
121
|
left: number;
|
|
122
122
|
top: number;
|
|
123
123
|
visible: boolean;
|
|
@@ -171,29 +171,29 @@ var r = (e) => !!e && typeof e == "object" && !("tagName" in e) && "commonAncest
|
|
|
171
171
|
top: e.top + (t.top ?? 0),
|
|
172
172
|
width: e.width - (t.left ?? 0) - (t.right ?? 0),
|
|
173
173
|
height: e.height - (t.top ?? 0) - (t.bottom ?? 0)
|
|
174
|
-
} : e, b = (e, t, n) => n < t ? t : Math.min(Math.max(e, t), n), x = (e, t, n, r = "bottom", i = 5) => {
|
|
175
|
-
let
|
|
176
|
-
if (
|
|
177
|
-
let
|
|
174
|
+
} : e, b = (e, t, n) => n < t ? t : Math.min(Math.max(e, t), n), x = (e, t, n, r = "bottom", i = 5, a = 0) => {
|
|
175
|
+
let o = n.getBoundingClientRect(), s = o.width, l = o.height;
|
|
176
|
+
if (s < 1 || l < 1) return c;
|
|
177
|
+
let u = t.left + t.width, d = t.top + t.height, f = e.top + e.height, p = f - d, m = t.top - e.top, h = i + a, g = l + h, _ = l + i, v = e.left, y = e.left + e.width, x = e.top, S = v + i, C = y - s - i, w = x + i, T = f - l - i;
|
|
178
178
|
if (r === "right") return {
|
|
179
|
-
left: b(
|
|
180
|
-
top: b(t.top + t.height / 2 -
|
|
179
|
+
left: b(u + i, S, C),
|
|
180
|
+
top: b(t.top + t.height / 2 - l / 2, w, T),
|
|
181
181
|
visible: !0
|
|
182
182
|
};
|
|
183
|
-
let
|
|
184
|
-
return
|
|
185
|
-
left:
|
|
186
|
-
top: b(
|
|
183
|
+
let E = b(t.left + t.width / 2 - s / 2, S, C), D = r === "top", O;
|
|
184
|
+
return O = p >= g && m >= _ ? D ? t.top - l - i : d + h : p >= g ? d + h : m >= _ ? t.top - l - i : t.top + t.height / 2 - l / 2, {
|
|
185
|
+
left: E,
|
|
186
|
+
top: b(O, w, T),
|
|
187
187
|
visible: !0
|
|
188
188
|
};
|
|
189
|
-
}, S = (e, t, n, r, i) => {
|
|
189
|
+
}, S = (e, t, n, r, i, a = 0) => {
|
|
190
190
|
if (!n || !t) return c;
|
|
191
|
-
let
|
|
192
|
-
if (!
|
|
193
|
-
let
|
|
194
|
-
return
|
|
195
|
-
...x(
|
|
196
|
-
baseRect:
|
|
191
|
+
let o = n.ownerDocument.defaultView, s = p(t, o);
|
|
192
|
+
if (!s?.inSameWindow) return c;
|
|
193
|
+
let l = y(v(e.getBoundingClientRect()), i), u = _(s.normalizedRects, l, !0);
|
|
194
|
+
return u ? {
|
|
195
|
+
...x(l, u, n, r ?? "bottom", void 0, a),
|
|
196
|
+
baseRect: u
|
|
197
197
|
} : c;
|
|
198
198
|
}, C = (e, t, n, r) => {
|
|
199
199
|
if (!t) return c;
|
|
@@ -259,14 +259,14 @@ var r = (e) => !!e && typeof e == "object" && !("tagName" in e) && "commonAncest
|
|
|
259
259
|
bottom: 8,
|
|
260
260
|
left: 8,
|
|
261
261
|
right: 8
|
|
262
|
-
}, E = (e, t, n, r, i, a = T) => {
|
|
262
|
+
}, E = (e, t, n, r, i, a = T, o = 0) => {
|
|
263
263
|
if (!n || !t) return c;
|
|
264
|
-
let
|
|
264
|
+
let l = r ?? "bottom";
|
|
265
265
|
if (i == "page") {
|
|
266
|
-
let { baseWindow: r, baseBoundingRect: i } = s(t),
|
|
267
|
-
return i.right < 0 ||
|
|
266
|
+
let { baseWindow: r, baseBoundingRect: i } = s(t), u = r.innerWidth, d = r.innerHeight, f = Math.round(i.left);
|
|
267
|
+
return i.right < 0 || f > u || i.bottom < 0 || i.top > d ? c : S(e, t, n, l, a, o);
|
|
268
268
|
}
|
|
269
|
-
return S(e, t, n,
|
|
269
|
+
return S(e, t, n, l, a, o);
|
|
270
270
|
}, D = (e, t) => t.left >= e.left && t.top >= e.top && t.right <= e.right && t.bottom <= e.bottom, O = (e, t) => t.right > e.left && t.left < e.right && t.top < e.bottom && t.bottom > e.top, k = (e) => e == "vertical-lr" || e == "vertical-rl", A = (e) => ({
|
|
271
271
|
left: e.left,
|
|
272
272
|
top: e.top,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../kernal/common/uuid.cjs");require("../../kernal/Constants.cjs");const t=require("../../kernal/html/finder.cjs"),n=require("../../kernal/html/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../kernal/common/uuid.cjs");require("../../kernal/Constants.cjs");const t=require("../../kernal/html/finder.cjs"),n=require("../../kernal/html/position.cjs"),r=require("../../kernal/html/text.cjs"),i=require("../../kernal/html/types.cjs");var a=[`object`,`svg`,`embed`,`audio`,`video`,`canvas`,`img`],o=new Map,s=new Map,c=e=>e.ownerDocument?e:t.getDocumentBody(e),l=e=>{let t=c(e).childNodes;for(let e of t)if(e.nodeType==Node.TEXT_NODE&&e.textContent?.trim())return!0;return!1},u=e=>{let t=0;for(let n of a)t+=e.getElementsByTagName(n).length;return t},d=(n,l)=>{let u=o.get(n);u||(u=e.getUuid(),o.set(n,u));let d=`${l}${u}`,f=c(n),p=s.get(d);if(p&&p.length==f.getElementsByTagName(`*`).length+1)return p;let m=[],h=0,g=t.getAllNodes(f);for(let e=0;e<g.length;e++){let n=g[e];if(n.nodeType==Node.ELEMENT_NODE){let e=n;m.push(new i.SymbolOffset(e,h)),l==`custom`&&t.checkIsOtherNonWhiteSpaceSymbol(e.tagName,a)&&(h+=1)}else n.nodeType==Node.TEXT_NODE&&(h+=r.getPureInnerTextLength(n))}let _=m.reverse();return s.set(d,_),_},f=class{constructor(){this.defaultSymbolType=`custom`,this.count=(e,t)=>{let n=t??this.defaultSymbolType,i=c(e),a=r.getPureInnerTextLength(i);return n==`custom`&&(a+=u(i)),a},this.getElementByProgress=(e,t,n)=>{let r=n??this.defaultSymbolType,i=t??0,a=Math.ceil(this.count(e,r)*i);return this.getElementByPosition(e,a,r)},this.getProgressByElement=(e,t,n,r)=>{let i=n??this.defaultSymbolType,a=this.count(e,i);return this.getPositionByElement(e,t,i,r)/a},this.getPositionByElement=(e,n,r,i)=>{let a=r??this.defaultSymbolType,o;if(n.tagIndex>=0){let r=n;o=t.getElementByNameAndIndex(e,r.tagName,r.tagIndex??0)}else o=n;if(!o)return-1;let s=d(e,a).find(e=>e.element==o);return(s?s.offset:-1)+(i??0)},this.getElementByPosition=(e,o,s,u)=>{let f=s??this.defaultSymbolType,p=d(e,f),m=p.findIndex(e=>o>=e.offset);if(m<0)return null;let h=p[m];if(!h.element.getAttribute(`data-initial-index`)){let e=p.length-1;for(;m<e&&(m++,h=p[m],!h.element.getAttribute(`data-initial-index`)););}let g,_=o-h.offset,v=this.count(h.element,f);if(_==0&&u&&m<p.length-1&&(h=p[m+1]),_=o-h.offset,v=this.count(h.element,f),_>v){if(m==0)g=v;else if(h=p.find(e=>e.element==h.element.parentElement),h||=l(e)?new i.SymbolOffset(c(e),0):p[m-1],!l(e)&&f==`char`&&t.compareTagName(h.element.tagName,`BODY`)){let e=p[m-1];e&&e.offset>=o&&(h=e)}}if(!l(e)&&f==`char`&&t.compareTagName(h.element.tagName,`BODY`)){let e=h.element.children,t;for(let n=0;n<e.length;n++)if(!a.includes(e[n].tagName.toLowerCase())){t=e[n];break}if(t)return new n.ElementPositionResult(t,0,0)}if(g===void 0){if(g=o-h.offset,g<0)g=0;else if(f==`char`){v=r.getPureInnerTextLength(h.element);let e=0;for(;g>v&&e<256;){e++;let t=p.find(e=>e.element===h.element.parentElement);if(!t){g=v;break}if(h=t,v=r.getPureInnerTextLength(h.element),g=o-h.offset,g<0){g=0;break}}g>v&&(g=v)}}let y=t.getElementIndex(e,h.element);return y==-1&&t.compareTagName(h.element.tagName,`BODY`)&&(y=-2),new n.ElementPositionResult(h.element,y,g)}}},p=new f;exports.DefaultHtmlSymbolMeasure=f,exports.defaultHtmlSymbolMeasure=p;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getUuid as e } from "../../kernal/common/uuid.mjs";
|
|
2
2
|
import "../../kernal/Constants.mjs";
|
|
3
3
|
import { checkIsOtherNonWhiteSpaceSymbol as t, compareTagName as n, getAllNodes as r, getDocumentBody as i, getElementByNameAndIndex as a, getElementIndex as o } from "../../kernal/html/finder.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { ElementPositionResult as s } from "../../kernal/html/position.mjs";
|
|
5
5
|
import { getPureInnerTextLength as c } from "../../kernal/html/text.mjs";
|
|
6
|
-
import {
|
|
6
|
+
import { SymbolOffset as l } from "../../kernal/html/types.mjs";
|
|
7
7
|
//#region mediaTypes/html/DefaultHtmlSymbolMeasure.ts
|
|
8
8
|
var u = [
|
|
9
9
|
"object",
|
|
@@ -24,14 +24,14 @@ var u = [
|
|
|
24
24
|
}, g = (n, i) => {
|
|
25
25
|
let a = d.get(n);
|
|
26
26
|
a || (a = e(), d.set(n, a));
|
|
27
|
-
let o = `${i}${a}`,
|
|
28
|
-
if (m && m.length ==
|
|
29
|
-
let h = [], g = 0, _ = r(
|
|
27
|
+
let o = `${i}${a}`, s = p(n), m = f.get(o);
|
|
28
|
+
if (m && m.length == s.getElementsByTagName("*").length + 1) return m;
|
|
29
|
+
let h = [], g = 0, _ = r(s);
|
|
30
30
|
for (let e = 0; e < _.length; e++) {
|
|
31
31
|
let n = _[e];
|
|
32
32
|
if (n.nodeType == Node.ELEMENT_NODE) {
|
|
33
33
|
let e = n;
|
|
34
|
-
h.push(new
|
|
34
|
+
h.push(new l(e, g)), i == "custom" && t(e.tagName, u) && (g += 1);
|
|
35
35
|
} else n.nodeType == Node.TEXT_NODE && (g += c(n));
|
|
36
36
|
}
|
|
37
37
|
let v = h.reverse();
|
|
@@ -67,7 +67,7 @@ var u = [
|
|
|
67
67
|
let _, v = t - h.offset, y = this.count(h.element, a);
|
|
68
68
|
if (v == 0 && i && f < d.length - 1 && (h = d[f + 1]), v = t - h.offset, y = this.count(h.element, a), v > y) {
|
|
69
69
|
if (f == 0) _ = y;
|
|
70
|
-
else if (h = d.find((e) => e.element == h.element.parentElement), h ||= m(e) ? new
|
|
70
|
+
else if (h = d.find((e) => e.element == h.element.parentElement), h ||= m(e) ? new l(p(e), 0) : d[f - 1], !m(e) && a == "char" && n(h.element.tagName, "BODY")) {
|
|
71
71
|
let e = d[f - 1];
|
|
72
72
|
e && e.offset >= t && (h = e);
|
|
73
73
|
}
|
|
@@ -78,7 +78,7 @@ var u = [
|
|
|
78
78
|
t = e[n];
|
|
79
79
|
break;
|
|
80
80
|
}
|
|
81
|
-
if (t) return new
|
|
81
|
+
if (t) return new s(t, 0, 0);
|
|
82
82
|
}
|
|
83
83
|
if (_ === void 0) {
|
|
84
84
|
if (_ = t - h.offset, _ < 0) _ = 0;
|
|
@@ -101,7 +101,7 @@ var u = [
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
let b = o(e, h.element);
|
|
104
|
-
return b == -1 && n(h.element.tagName, "BODY") && (b = -2), new
|
|
104
|
+
return b == -1 && n(h.element.tagName, "BODY") && (b = -2), new s(h.element, b, _);
|
|
105
105
|
};
|
|
106
106
|
}
|
|
107
107
|
}, v = new _();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../kernal/EventNames.cjs"),t=require("../../../kernal/common/uuid.cjs"),n=require("../../../kernal/Options.cjs"),r=require("../../../kernal/Theme.cjs"),i=require("../../../kernal/web/scheduler.cjs"),a=require("
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../kernal/EventNames.cjs"),t=require("../../../kernal/common/uuid.cjs"),n=require("../../../kernal/Options.cjs"),r=require("../../../kernal/Theme.cjs"),i=require("../../../kernal/web/scheduler.cjs"),a=require("../HtmlOptions.cjs"),o=require("../../../kernal/html/events.cjs"),s=require("./navigator/HtmlCoreNavigator.cjs"),c=require("./layout/resolveLayoutRoute.cjs"),l=require("./navigator/HtmlPagingNavigator.cjs"),u=require("./navigator/HtmlNavPointNavigator.cjs"),d=require("./navigator/HtmlNavPointProvider.cjs"),f=require("./progress/HtmlProgressTracker.cjs"),p=require("./location/scrollActivity.cjs"),m=require("./documents/HtmlDocumentsProvider.cjs"),h=require("./layout/HtmlRendererLayout.cjs"),g=require("./style/HtmlStyleProvider.cjs"),_=require("./style/HtmlThemeApplier.cjs"),v=require("./documents/HtmlDocumentsResizeObserver.cjs"),y=require("./html/HtmlContentProcessor.cjs"),b=require("./image/HtmlImageLoader.cjs"),x=require("./image/HtmlImageObserver.cjs");var S=class extends m.HtmlDocumentsProvider{constructor(e,r,o,c){super(e,r,o,c),this.isInitRenderer=!1,this.injectProcessHandlers=()=>{this.addDocumentPreprocess(this.preprocessHandler)},this.preprocessHandler=async e=>{await this.contentProcessor.preprocess(e),await this.styleProvider.injectStyles(e);let t=await this.resolveCurrentTheme();t&&await this.themeApplier.applyToDocument(e,t),await this.rendererLayout.applyDocStyles(e),await this.imageLoader.preprocessImages(e);let n=await this.getHighlighter();n&&await n.highlight(e)},this.onPageChange=async()=>{this.progressTracker.notifyProgressChange()},this.onDocumentSizeChange=async()=>{this.owner.context.userChangedProgress||p.isProgrammaticScroll()||p.isUserScrollSettling()||await this.delayRestoreReadingPosition()},this.onOptionsChange=async e=>{let t=this.getRendererContainer();if(!(!t||!t.ownerDocument.defaultView)&&(n.isOptionKey(e)||a.isHtmlOptionKey(e))){let t=a.isHtmlOptionKey(e);if(t){if(!this.owner.context.currentLocation?.precise){let e=await this.progressTracker.getProgress(!0);e&&(this.owner.context.currentLocation=e.location)}this.owner.context.setUserChangedProgress(!1)}if(this.rendererViewport.applyCssVariables(),await i.yieldToMain(),t){for(let e of this.getLoadedDocuments())await this.rendererLayout.applyDocStyles(e);this.owner.context.userChangedProgress||await this.reload()}}},this.progressTracker=new f.HtmlProgressTracker(e,this,c),this.rendererLayout=new h.HtmlRendererLayout(e,this,this.rendererViewport,this.progressTracker,c),this.navPointProvider=new d.HtmlNavPointProvider(this,c),this.navigator=new s.HtmlCoreNavigator(this,c),this.navPointNavigator=new u.HtmlNavPointNavigator(e.locale,e.notifier,this,this.navigator,this.navPointProvider),this.pagingNavigator=new l.HtmlPagingNavigator(this,this.navigator,c),this.styleProvider=new g.HtmlStyleProvider(this),this.currentInstanceId=t.getRandomId(!0),this.themeApplier=new _.HtmlThemeApplier(this),this.documentsResizeObserver=new v.HtmlDocumentsResizeObserver(this,this.rendererViewport,this.progressTracker,this.rendererLayout),this.contentProcessor=new y.HtmlContentProcessor(r),this.imageLoader=this.createImageLoader(),this.imageObserver=new x.HtmlImageObserver(this,c),this.bindEvents(),this.bindScrollWatch(),this.injectProcessHandlers()}get id(){return this.currentInstanceId}createImageLoader(){return new b.HtmlImageLoader(this,this.rendererViewport,this.htmlOptions)}async resolveCurrentTheme(){return(await this.owner.services.get(`themeProvider`))?.getCurrentTheme()??new r.Theme}async getHighlighter(){}bindEvents(){this.owner.events.on(e.EventNames.OptionsChange,this.onOptionsChange),this.owner.events.on(e.EventNames.PageChange,this.onPageChange),this.owner.events.on(e.EventNames.DocumentSizeChange,this.onDocumentSizeChange)}unbindEvents(){this.owner.events.off(e.EventNames.OptionsChange,this.onOptionsChange),this.owner.events.off(e.EventNames.PageChange,this.onPageChange),this.owner.events.off(e.EventNames.DocumentSizeChange,this.onDocumentSizeChange)}bindScrollWatch(){let t=this.owner.getHostViewport();this.scrollWatchTarget=t.mode==`window`?t.scrollWatchTarget:this.getScrollElement(),this.scrollWatchTarget&&(this.scrollWatchState=o.watchScroll(this.scrollWatchTarget,this.owner.options.calcScrollDirection,async(t,n)=>{this.owner.events.emit(e.EventNames.ReaderDebounceScroll,t,n),this.progressTracker.notifyProgressChange()},t=>{p.isProgrammaticScroll()||!t.isTrusted||(this.owner.onProgressChangeGuard&&this.owner.context?.progress?.current&&(this.owner.onProgressChangeGuard(this.owner.context.progress.current)||t.preventDefault()),p.markUserScroll(),p.releaseAbsoluteLocate(),this.owner.events.emit(e.EventNames.ReaderOriginalScroll,t))}))}async load(e,t){e||=this.owner.context.progress?.location,this.isInitRenderer||(this.isInitRenderer=!0,this.documentsResizeObserver.register(),this.imageObserver.register()),await super.load(e,t)}getFileParser(){return this.fileParser}get writingMode(){return this.htmlOptions.writingMode??`horizontal-tb`}get direction(){return c.resolveHtmlTextDirection(this.htmlOptions)}get layout(){return this.rendererLayout}async applyTheme(e){await this.themeApplier.applyTheme(e);let t=await this.getHighlighter();t&&await t.applyTheme(e)}async dispose(){this.unbindEvents();let e=this.scrollWatchTarget??this.getScrollElement();e&&this.scrollWatchState?._eventHandler&&(e.removeEventListener(`scroll`,this.scrollWatchState._eventHandler,!0),this.scrollWatchState=void 0,this.scrollWatchTarget=void 0),await this.progressTracker.dispose(),await this.imageObserver.dispose(),await this.imageLoader.dispose(),await super.dispose(),await this.styleProvider?.dispose(),await this.navPointProvider?.dispose(),await this.pagingNavigator?.dispose(),await this.documentsResizeObserver.dispose(),await this.contentProcessor.dispose()}};exports.HtmlRenderer=S;
|
|
@@ -3,8 +3,8 @@ import { getRandomId as t } from "../../../kernal/common/uuid.mjs";
|
|
|
3
3
|
import { isOptionKey as n } from "../../../kernal/Options.mjs";
|
|
4
4
|
import { Theme as r } from "../../../kernal/Theme.mjs";
|
|
5
5
|
import { yieldToMain as i } from "../../../kernal/web/scheduler.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { isHtmlOptionKey as a } from "../HtmlOptions.mjs";
|
|
7
|
+
import { watchScroll as o } from "../../../kernal/html/events.mjs";
|
|
8
8
|
import { HtmlCoreNavigator as s } from "./navigator/HtmlCoreNavigator.mjs";
|
|
9
9
|
import { resolveHtmlTextDirection as c } from "./layout/resolveLayoutRoute.mjs";
|
|
10
10
|
import { HtmlPagingNavigator as l } from "./navigator/HtmlPagingNavigator.mjs";
|
|
@@ -22,8 +22,8 @@ import { HtmlImageLoader as C } from "./image/HtmlImageLoader.mjs";
|
|
|
22
22
|
import { HtmlImageObserver as w } from "./image/HtmlImageObserver.mjs";
|
|
23
23
|
//#region mediaTypes/html/renderer/HtmlRenderer.ts
|
|
24
24
|
var T = class extends _ {
|
|
25
|
-
constructor(e, r,
|
|
26
|
-
super(e, r,
|
|
25
|
+
constructor(e, r, o, c) {
|
|
26
|
+
super(e, r, o, c), this.isInitRenderer = !1, this.injectProcessHandlers = () => {
|
|
27
27
|
this.addDocumentPreprocess(this.preprocessHandler);
|
|
28
28
|
}, this.preprocessHandler = async (e) => {
|
|
29
29
|
await this.contentProcessor.preprocess(e), await this.styleProvider.injectStyles(e);
|
|
@@ -37,8 +37,8 @@ var T = class extends _ {
|
|
|
37
37
|
this.owner.context.userChangedProgress || p() || m() || await this.delayRestoreReadingPosition();
|
|
38
38
|
}, this.onOptionsChange = async (e) => {
|
|
39
39
|
let t = this.getRendererContainer();
|
|
40
|
-
if (!(!t || !t.ownerDocument.defaultView) && (n(e) ||
|
|
41
|
-
let t =
|
|
40
|
+
if (!(!t || !t.ownerDocument.defaultView) && (n(e) || a(e))) {
|
|
41
|
+
let t = a(e);
|
|
42
42
|
if (t) {
|
|
43
43
|
if (!this.owner.context.currentLocation?.precise) {
|
|
44
44
|
let e = await this.progressTracker.getProgress(!0);
|
|
@@ -71,7 +71,7 @@ var T = class extends _ {
|
|
|
71
71
|
}
|
|
72
72
|
bindScrollWatch() {
|
|
73
73
|
let t = this.owner.getHostViewport();
|
|
74
|
-
this.scrollWatchTarget = t.mode == "window" ? t.scrollWatchTarget : this.getScrollElement(), this.scrollWatchTarget && (this.scrollWatchState =
|
|
74
|
+
this.scrollWatchTarget = t.mode == "window" ? t.scrollWatchTarget : this.getScrollElement(), this.scrollWatchTarget && (this.scrollWatchState = o(this.scrollWatchTarget, this.owner.options.calcScrollDirection, async (t, n) => {
|
|
75
75
|
this.owner.events.emit(e.ReaderDebounceScroll, t, n), this.progressTracker.notifyProgressChange();
|
|
76
76
|
}, (t) => {
|
|
77
77
|
p() || !t.isTrusted || (this.owner.onProgressChangeGuard && this.owner.context?.progress?.current && (this.owner.onProgressChangeGuard(this.owner.context.progress.current) || t.preventDefault()), h(), g(), this.owner.events.emit(e.ReaderOriginalScroll, t));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/EventNames.cjs"),t=require("../../../../kernal/common/uuid.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),r=require("../../../../kernal/Constants.cjs"),i=require("../../../../kernal/html/finder.cjs"),a=require("../../../../kernal/html/dom.cjs"),o=require("../../../../kernal/web/scheduler.cjs"),s=require("../../../../kernal/html/geometry.cjs"),c=require("../../HtmlSettings.cjs"),l=require("../../../base/renderer/BaseDocument.cjs"),u=require("../visibilityCandidates.cjs"),d=require("../layout/resolveLayoutRoute.cjs"),f=require("../../fileParser/IHtmlFileParser.cjs"),p=require("../../../base/renderer/eventKeys.cjs"),m=require("../html/template.cjs"),h=require("./HtmlPageCalculator.cjs"),g=require("./HtmlSymbolCalclator.cjs"),_=require("./HtmlDocumentResizeObserver.cjs"),v=require("../location/HtmlLayoutStatePreserver.cjs"),y=require("../location/remapStoredPageNumber.cjs");var b=class extends l.BaseDocument{constructor(t,n,r,i,a,s){super(t,r,i,a),this.options=s,this.eventKeyMap=p.getEventKeyMap(),this.visibilityCandidates=null,this.callbacks=[],this.retainLoadingLayer=!1,this.pendingPageLayoutState=null,this.pageStripConcealed=!1,this.waitForRevealPaint=async()=>{await o.yieldToMain(),await new Promise(e=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>e())})}),await new Promise(e=>{window.setTimeout(e,120)}),await this.waitForVisibleImagesReady()},this.waitForVisibleImagesReady=async()=>{let e=this.getContentContainer(),t=e?.ownerDocument?.defaultView;if(!e||!t)return;let n=[...e.querySelectorAll(`img`),...e.getElementsByTagName(`image`)];if(n.length==0)return;let r=t.innerHeight||e.clientHeight,i=n.filter(e=>{let t=e.getBoundingClientRect();return t.bottom>-200&&t.top<r+200});i.length!=0&&await Promise.race([Promise.all(i.map(e=>this.waitForImageReady(e))),new Promise(e=>{window.setTimeout(e,800)})])},this.waitForImageReady=e=>this.isImageReady(e)?Promise.resolve():new Promise(t=>{let n=!1,r=()=>{n||(n=!0,e.removeEventListener(`load`,r),e.removeEventListener(`error`,r),i.disconnect(),t())},i=new MutationObserver(()=>{this.isImageReady(e)&&r()});i.observe(e,{attributes:!0,attributeFilter:[`src`,`href`,`data-load-state`]}),e.addEventListener(`load`,r),e.addEventListener(`error`,r),window.setTimeout(r,800)}),this.isImageReady=e=>{let t=e.getAttribute(`data-load-state`);if(t==`loaded`||t==`fail`)return!0;let n=e.ownerDocument.defaultView?.window.HTMLImageElement;if(!n||!(e instanceof n))return!1;let r=e.currentSrc||e.src;return!r||r.startsWith(`data:image/svg+xml`)?!1:e.complete&&e.naturalWidth>0},this.bringLoadingLayerToFront=()=>{let e=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);e&&this.wrapperContainer.appendChild(e)},this.fadeOutCover=async(e=200)=>{let t=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);if(!t)return;let n=Math.max(0,e);t.style.pointerEvents=`none`,t.style.transition=`opacity ${n}ms ease`,t.style.opacity=`0`,await new Promise(e=>{let r=!1,i=()=>{r||(r=!0,t.removeEventListener(`transitionend`,i),e())};t.addEventListener(`transitionend`,i),window.setTimeout(i,n+50)})},this.releaseLoadingLayer=async()=>{this.loadingLayer?.removeLoadingLayer(),await this.loadingLayer?.dispose(),this.loadingLayer=void 0},this.buildLoadingContent=async()=>{let e=await this.getFormattedVirtualDocument(),t=this.owner.getRenderer()?.documentPreprocesses??[];for(let e of t)try{await e(this)}catch(t){this.logger.error(`preprocess`,`function`,e?.name,t)}let n=e.documentElement.outerHTML.replace(/<([^<]*)\?xml([^>]*)\?.*?>/i,``);return n.match(/<!DOCTYPE[^>]*>/i)||(n=`<!DOCTYPE html>`+n),n},this.processAfterLoaded=async()=>{let t=this.getContentContainer();if(!t){this.revealPendingPageStrip();return}t.setAttribute(`data-url`,this.url);let n=this.pendingPageLayoutState??this.captureLayoutState();this.pendingPageLayoutState=null;let r=d.getLayoutGeometry(this.options).iframeGrow==`width`;r||this.wrapperContainer.classList.remove(c.HtmlSettings.FileContentContainerHeightClassName);try{let e=this.owner.getRenderer()?.documentPostprocesses??[];for(let t of e)try{await t(this),await o.yieldToMain()}catch(e){this.logger.error(`postprocess`,`function`,t?.name,e)}await this.layoutStatePreserver.waitUntilPageTransformStable(),this.resetLayoutSizes(),r&&this.wrapperContainer.classList.remove(c.HtmlSettings.FileContentContainerHeightClassName),await this.layoutStatePreserver.restore(n)}finally{this.revealPendingPageStrip()}this.retainLoadingLayer||await this.releaseLoadingLayer(),this.loadStatus=`success`,this.visibilityCandidates=null,this.bindDocumentEvents(),this.owner.events.emit(e.EventNames.DocumentLoad,this),this.resizeObserver.observeIframeSize(async()=>{let e=d.getLayoutGeometry(this.options),t=y.shouldKeepPageEndOnContentGrow(this.owner.context.currentLocation,this.url),n=e.restoresScrollAfterResize||t,r=n?this.captureLayoutState():null;if(this.resetLayoutSizes(),e.flipMode==`page`&&this.pageCalculator.calcNumberOfPages(!0),n&&r&&(await this.restoreLayoutState(r),t)){let e=this.internalGetNumberOfPages(),t=this.owner.context.currentLocation;t?.url==this.url&&(t.current=e,t.total=e)}}),this.loadCompleted(!0)},this.loadCompleted=e=>{for(let t=0;t<this.callbacks.length;t++)try{e?this.callbacks[t].resolve():this.callbacks[t].reject()}catch{}this.callbacks=[]},this.capture=!0,this.eventListener=e=>{let t=this.eventKeyMap.get(e.type);t&&this.owner.events.emit(t,e,this)},this.pageCalculator=new h.HtmlPageCalculator(this,n,s),this.symbolCalclator=new g.HtmlSymbolCalclator(this,f.asHtmlFileParser(r).symbolMeasure),this.layoutStatePreserver=new v.HtmlLayoutStatePreserver(this,n,s),this.logger=this.owner.loggerFactory.getLogger(this.constructor.name),this.resizeObserver=new _.HtmlDocumentResizeObserver(this,this.owner.events)}get inIframe(){return!0}async load(){await new Promise(async(i,s)=>{if(this.loadStatus==`success`){i();return}if(this.callbacks.push({resolve:i,reject:s}),this.loadStatus!=`loading`){this.loadStatus=`loading`,this.loadingLayer=await this.owner.services.get(`loadLayer`),this.loadingLayer?.setDoc(this),a.emptyElement(this.wrapperContainer),this.loadingLayer.removeLoadingLayer(),this.loadingLayer.loadLoadingLayer(),await o.yieldToMain();try{if(this.inIframe){if(!this.iframe){let i=r.readerPrefixName+t.getUuid(!0);this.iframe=m.createIframe(this.wrapperContainer.ownerDocument,i,this.options.forceScroll,d.getLayoutGeometry(this.options)),this.options.forceScroll?this.iframe.removeAttribute(`scrolling`):this.iframe.setAttribute(`scrolling`,`no`);let a=await this.buildLoadingContent();await o.yieldToMain(),this.wrapperContainer.appendChild(this.iframe),this.bringLoadingLayerToFront(),await o.yieldToMain(),this.iframe.addEventListener(`load`,async()=>{await this.processAfterLoaded()},!1),this.iframe.addEventListener(`error`,t=>{this.revealPendingPageStrip(),this.retainLoadingLayer=!1,this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.logger.error(t),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t),this.loadCompleted(!0)},!1);let s=this.iframe.contentDocument,c=this.captureLayoutState(),l=d.getLayoutGeometry(this.options).flipMode==`page`&&n.BrowserCapabilities.isSafari();l&&(this.pendingPageLayoutState=c,this.concealPageStrip()),this.options.preferSrcdoc&&`srcdoc`in this.iframe||!(`write`in s)?this.iframe.srcdoc=a:(s.open(),s.write(a),s.close()),l||await this.restoreLayoutState(c),await o.yieldToMain()}}else{let e=await this.buildLoadingContent();a.setElementHtml(this.wrapperContainer,e),await this.processAfterLoaded(),await o.yieldToMain()}}catch(t){this.revealPendingPageStrip(),this.logger.error(t),this.retainLoadingLayer=!1,this.owner?.context?(this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t?.toString()),this.loadCompleted(!0)):(await this.releaseLoadingLayer(),this.loadCompleted(!0))}}})}prepareCoveredLoad(){this.retainLoadingLayer=!0}async revealCoveredLoad(){this.retainLoadingLayer=!1;try{await this.waitForRevealPaint(),await this.fadeOutCover()}finally{await this.releaseLoadingLayer()}}resetLayoutSizes(){this.resetIframeMinSize()}captureLayoutState(){return this.layoutStatePreserver.capture()}async restoreLayoutState(e){await this.layoutStatePreserver.restore(e)}concealPageStrip(){this.pageStripConcealed=!0,this.layoutStatePreserver.concealPageStrip()}revealPendingPageStrip(){this.pendingPageLayoutState=null,this.pageStripConcealed&&(this.pageStripConcealed=!1,this.layoutStatePreserver.revealPageStrip())}resetIframeMinSize(){let e=this.getContentRootElement();if(!e||!this.iframe)return;let t=d.getLayoutGeometry(this.options),n=i.getDocumentBody(e.ownerDocument);this.iframe.style.removeProperty(`transform`),this.iframe.style.removeProperty(`will-change`);let r=this.owner.getRenderer()?.getRendererContainer(),a=parseFloat(r?.getAttribute(`data-column-width`)??``)||Math.round(this.iframe.getBoundingClientRect().width),o=parseFloat(r?.getAttribute(`data-page-height`)??``)||Math.round(this.iframe.getBoundingClientRect().height),s=parseFloat(r?.getAttribute(`data-column-gap`)??``);t.sizeIframe({iframe:this.iframe,contentRoot:e,body:n,forceScroll:!!this.options.forceScroll,columnWidth:Number.isFinite(a)?Math.round(a):0,pageHeight:Number.isFinite(o)?Math.round(o):0,columnGap:Number.isFinite(s)&&s>0?s:0,parentContentHeight:this.getParentContentHeight(this.iframe.parentElement)}),t.useColumnLayout&&this.pageCalculator.calcNumberOfPages(!0)}getParentContentHeight(e){if(!e)return 0;let t=e.ownerDocument.defaultView?.getComputedStyle(e),n=parseFloat(t?.paddingTop??`0`)||0,r=parseFloat(t?.paddingBottom??`0`)||0;return Math.max(0,Math.round(e.clientHeight-n-r))}async getContent(){return this.docContent?this.docContent:(this.docContent=await(await this.fileParser.getTextDocument(this.url)).getPlaintext(),this.docContent.length>this.options.singleDocMaxSize?m.getTooBigHtmlTemplate(this.docContent.length):this.docContent)}async getFormattedVirtualDocument(){if(this.formattedVirtualDocument)return this.formattedVirtualDocument;let e=await this.fileParser.getTextDocument(this.url);return this.formattedVirtualDocument=await e.getFormattedDocument(),this.formattedVirtualDocument}async getText(e){return await(await this.fileParser.getTextDocument(this.url)).getPlaintext(e)}internalGetNumberOfPages(){let e=1;return this.getFlipMode()==`page`&&(e=this.pageCalculator.calcNumberOfPages()),e}async getNumberOfPages(){return await this.load(),this.internalGetNumberOfPages()}async getPageNumber(e){return this.pageCalculator.getPageNumber(e)}getContentRootElement(){return this.inIframe?this.iframe?.contentDocument?.documentElement:this.wrapperContainer}getContentContainer(){return this.inIframe?i.getDocumentBody(this.iframe?.contentDocument):this.wrapperContainer}async getVirtualContentContainer(e){if(e){let e=await this.fileParser.getTextDocument(this.url);return i.getDocumentBody(await e.getFormattedDocument())}let t=await this.getFormattedVirtualDocument();return i.getDocumentBody(t)}getVisibleElements(e){if(this.loadStatus!=`success`)return[];let t=this.getContentContainer(),n=t?.ownerDocument?.defaultView;if(!t||!n)return[];this.visibilityCandidates||=u.collectContentUnitElements(t,{htmlBlockTags:this.options.htmlBlockTags});let r=this.owner.getRenderer()?.getRendererContainer().getBoundingClientRect().top,i=s.resolveVisibleViewportInContentWindow(n,{topInset:r});return i?s.getOrderedElementsIntersectingRect(this.visibilityCandidates,i,{writingMode:d.getLayoutGeometry(this.options).writingMode,fullVisible:e}):[]}async dispose(){let t=this.captureLayoutState();this.owner.events.emit(e.EventNames.DocumentDisposing,this),this.unbindDocumentEvents(),this.resizeObserver.unobserveIframeSize(),this.callbacks?.splice(0),this.visibilityCandidates=null,this.retainLoadingLayer=!1,await this.releaseLoadingLayer();let n=this.getWrapperContainer();n.classList.add(c.HtmlSettings.FileContentContainerHeightClassName),this.iframe&&n.contains(this.iframe)&&n.removeChild(this.iframe),a.emptyElement(this.wrapperContainer),this.iframe=void 0,this.formattedVirtualDocument=null,await this.symbolCalclator.dispose(),await this.restoreLayoutState(t),await super.dispose()}bindDocumentEvents(){let e=this.inIframe?this.getContentContainer().ownerDocument:this.getContentRootElement();for(let t of this.eventKeyMap.keys())e.addEventListener(t,this.eventListener,this.capture)}unbindDocumentEvents(){let e=this.inIframe?this.getContentContainer()?.ownerDocument:this.getContentRootElement();if(e)for(let t of this.eventKeyMap.keys())e?.removeEventListener(t,this.eventListener,this.capture)}getFlipMode(){return this.options.forceScroll?`scroll`:this.options.flipMode}};exports.HtmlDocument=b;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/EventNames.cjs"),t=require("../../../../kernal/common/uuid.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),r=require("../../../../kernal/Constants.cjs"),i=require("../../../../kernal/html/finder.cjs"),a=require("../../../../kernal/html/dom.cjs"),o=require("../../../../kernal/web/scheduler.cjs"),s=require("../../HtmlSettings.cjs"),c=require("../../../base/renderer/BaseDocument.cjs"),l=require("../../../../kernal/html/geometry.cjs"),u=require("../../../base/renderer/eventKeys.cjs"),d=require("../visibilityCandidates.cjs"),f=require("../layout/resolveLayoutRoute.cjs"),p=require("../../fileParser/IHtmlFileParser.cjs"),m=require("../html/template.cjs"),h=require("./HtmlPageCalculator.cjs"),g=require("./HtmlSymbolCalclator.cjs"),_=require("./HtmlDocumentResizeObserver.cjs"),v=require("../location/HtmlLayoutStatePreserver.cjs"),y=require("../location/remapStoredPageNumber.cjs");var b=class extends c.BaseDocument{constructor(t,n,r,i,a,c){super(t,r,i,a),this.options=c,this.eventKeyMap=u.getEventKeyMap(),this.visibilityCandidates=null,this.callbacks=[],this.retainLoadingLayer=!1,this.pendingPageLayoutState=null,this.pageStripConcealed=!1,this.waitForRevealPaint=async()=>{await o.yieldToMain(),await new Promise(e=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>e())})}),await new Promise(e=>{window.setTimeout(e,120)}),await this.waitForVisibleImagesReady()},this.waitForVisibleImagesReady=async()=>{let e=this.getContentContainer(),t=e?.ownerDocument?.defaultView;if(!e||!t)return;let n=[...e.querySelectorAll(`img`),...e.getElementsByTagName(`image`)];if(n.length==0)return;let r=t.innerHeight||e.clientHeight,i=n.filter(e=>{let t=e.getBoundingClientRect();return t.bottom>-200&&t.top<r+200});i.length!=0&&await Promise.race([Promise.all(i.map(e=>this.waitForImageReady(e))),new Promise(e=>{window.setTimeout(e,800)})])},this.waitForImageReady=e=>this.isImageReady(e)?Promise.resolve():new Promise(t=>{let n=!1,r=()=>{n||(n=!0,e.removeEventListener(`load`,r),e.removeEventListener(`error`,r),i.disconnect(),t())},i=new MutationObserver(()=>{this.isImageReady(e)&&r()});i.observe(e,{attributes:!0,attributeFilter:[`src`,`href`,`data-load-state`]}),e.addEventListener(`load`,r),e.addEventListener(`error`,r),window.setTimeout(r,800)}),this.isImageReady=e=>{let t=e.getAttribute(`data-load-state`);if(t==`loaded`||t==`fail`)return!0;let n=e.ownerDocument.defaultView?.window.HTMLImageElement;if(!n||!(e instanceof n))return!1;let r=e.currentSrc||e.src;return!r||r.startsWith(`data:image/svg+xml`)?!1:e.complete&&e.naturalWidth>0},this.bringLoadingLayerToFront=()=>{let e=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);e&&this.wrapperContainer.appendChild(e)},this.fadeOutCover=async(e=200)=>{let t=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);if(!t)return;let n=Math.max(0,e);t.style.pointerEvents=`none`,t.style.transition=`opacity ${n}ms ease`,t.style.opacity=`0`,await new Promise(e=>{let r=!1,i=()=>{r||(r=!0,t.removeEventListener(`transitionend`,i),e())};t.addEventListener(`transitionend`,i),window.setTimeout(i,n+50)})},this.releaseLoadingLayer=async()=>{this.loadingLayer?.removeLoadingLayer(),await this.loadingLayer?.dispose(),this.loadingLayer=void 0},this.buildLoadingContent=async()=>{let e=await this.getFormattedVirtualDocument(),t=this.owner.getRenderer()?.documentPreprocesses??[];for(let e of t)try{await e(this)}catch(t){this.logger.error(`preprocess`,`function`,e?.name,t)}let n=e.documentElement.outerHTML.replace(/<([^<]*)\?xml([^>]*)\?.*?>/i,``);return n.match(/<!DOCTYPE[^>]*>/i)||(n=`<!DOCTYPE html>`+n),n},this.processAfterLoaded=async()=>{let t=this.getContentContainer();if(!t){this.revealPendingPageStrip();return}t.setAttribute(`data-url`,this.url);let n=this.pendingPageLayoutState??this.captureLayoutState();this.pendingPageLayoutState=null;let r=f.getLayoutGeometry(this.options).iframeGrow==`width`;r||this.wrapperContainer.classList.remove(s.HtmlSettings.FileContentContainerHeightClassName);try{let e=this.owner.getRenderer()?.documentPostprocesses??[];for(let t of e)try{await t(this),await o.yieldToMain()}catch(e){this.logger.error(`postprocess`,`function`,t?.name,e)}await this.layoutStatePreserver.waitUntilPageTransformStable(),this.resetLayoutSizes(),r&&this.wrapperContainer.classList.remove(s.HtmlSettings.FileContentContainerHeightClassName),await this.layoutStatePreserver.restore(n)}finally{this.revealPendingPageStrip()}this.retainLoadingLayer||await this.releaseLoadingLayer(),this.loadStatus=`success`,this.visibilityCandidates=null,this.bindDocumentEvents(),this.owner.events.emit(e.EventNames.DocumentLoad,this),this.resizeObserver.observeIframeSize(async()=>{let e=f.getLayoutGeometry(this.options),t=y.shouldKeepPageEndOnContentGrow(this.owner.context.currentLocation,this.url),n=e.restoresScrollAfterResize||t,r=n?this.captureLayoutState():null;if(this.resetLayoutSizes(),e.flipMode==`page`&&this.pageCalculator.calcNumberOfPages(!0),n&&r&&(await this.restoreLayoutState(r),t)){let e=this.internalGetNumberOfPages(),t=this.owner.context.currentLocation;t?.url==this.url&&(t.current=e,t.total=e)}}),this.loadCompleted(!0)},this.loadCompleted=e=>{for(let t=0;t<this.callbacks.length;t++)try{e?this.callbacks[t].resolve():this.callbacks[t].reject()}catch{}this.callbacks=[]},this.capture=!0,this.eventListener=e=>{let t=this.eventKeyMap.get(e.type);t&&this.owner.events.emit(t,e,this)},this.pageCalculator=new h.HtmlPageCalculator(this,n,c),this.symbolCalclator=new g.HtmlSymbolCalclator(this,p.asHtmlFileParser(r).symbolMeasure),this.layoutStatePreserver=new v.HtmlLayoutStatePreserver(this,n,c),this.logger=this.owner.loggerFactory.getLogger(this.constructor.name),this.resizeObserver=new _.HtmlDocumentResizeObserver(this,this.owner.events)}get inIframe(){return!0}async load(){await new Promise(async(i,s)=>{if(this.loadStatus==`success`){i();return}if(this.callbacks.push({resolve:i,reject:s}),this.loadStatus!=`loading`){this.loadStatus=`loading`,this.loadingLayer=await this.owner.services.get(`loadLayer`),this.loadingLayer?.setDoc(this),a.emptyElement(this.wrapperContainer),this.loadingLayer.removeLoadingLayer(),this.loadingLayer.loadLoadingLayer(),await o.yieldToMain();try{if(this.inIframe){if(!this.iframe){let i=r.readerPrefixName+t.getUuid(!0);this.iframe=m.createIframe(this.wrapperContainer.ownerDocument,i,this.options.forceScroll,f.getLayoutGeometry(this.options)),this.options.forceScroll?this.iframe.removeAttribute(`scrolling`):this.iframe.setAttribute(`scrolling`,`no`);let a=await this.buildLoadingContent();await o.yieldToMain(),this.wrapperContainer.appendChild(this.iframe),this.bringLoadingLayerToFront(),await o.yieldToMain(),this.iframe.addEventListener(`load`,async()=>{await this.processAfterLoaded()},!1),this.iframe.addEventListener(`error`,t=>{this.revealPendingPageStrip(),this.retainLoadingLayer=!1,this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.logger.error(t),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t),this.loadCompleted(!0)},!1);let s=this.iframe.contentDocument,c=this.captureLayoutState(),l=f.getLayoutGeometry(this.options).flipMode==`page`&&n.BrowserCapabilities.isSafari();l&&(this.pendingPageLayoutState=c,this.concealPageStrip()),this.options.preferSrcdoc&&`srcdoc`in this.iframe||!(`write`in s)?this.iframe.srcdoc=a:(s.open(),s.write(a),s.close()),l||await this.restoreLayoutState(c),await o.yieldToMain()}}else{let e=await this.buildLoadingContent();a.setElementHtml(this.wrapperContainer,e),await this.processAfterLoaded(),await o.yieldToMain()}}catch(t){this.revealPendingPageStrip(),this.logger.error(t),this.retainLoadingLayer=!1,this.owner?.context?(this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t?.toString()),this.loadCompleted(!0)):(await this.releaseLoadingLayer(),this.loadCompleted(!0))}}})}prepareCoveredLoad(){this.retainLoadingLayer=!0}async revealCoveredLoad(){this.retainLoadingLayer=!1;try{await this.waitForRevealPaint(),await this.fadeOutCover()}finally{await this.releaseLoadingLayer()}}resetLayoutSizes(){this.resetIframeMinSize()}captureLayoutState(){return this.layoutStatePreserver.capture()}async restoreLayoutState(e){await this.layoutStatePreserver.restore(e)}concealPageStrip(){this.pageStripConcealed=!0,this.layoutStatePreserver.concealPageStrip()}revealPendingPageStrip(){this.pendingPageLayoutState=null,this.pageStripConcealed&&(this.pageStripConcealed=!1,this.layoutStatePreserver.revealPageStrip())}resetIframeMinSize(){let e=this.getContentRootElement();if(!e||!this.iframe)return;let t=f.getLayoutGeometry(this.options),n=i.getDocumentBody(e.ownerDocument);this.iframe.style.removeProperty(`transform`),this.iframe.style.removeProperty(`will-change`);let r=this.owner.getRenderer()?.getRendererContainer(),a=parseFloat(r?.getAttribute(`data-column-width`)??``)||Math.round(this.iframe.getBoundingClientRect().width),o=parseFloat(r?.getAttribute(`data-page-height`)??``)||Math.round(this.iframe.getBoundingClientRect().height),s=parseFloat(r?.getAttribute(`data-column-gap`)??``);t.sizeIframe({iframe:this.iframe,contentRoot:e,body:n,forceScroll:!!this.options.forceScroll,columnWidth:Number.isFinite(a)?Math.round(a):0,pageHeight:Number.isFinite(o)?Math.round(o):0,columnGap:Number.isFinite(s)&&s>0?s:0,parentContentHeight:this.getParentContentHeight(this.iframe.parentElement)}),t.useColumnLayout&&this.pageCalculator.calcNumberOfPages(!0)}getParentContentHeight(e){if(!e)return 0;let t=e.ownerDocument.defaultView?.getComputedStyle(e),n=parseFloat(t?.paddingTop??`0`)||0,r=parseFloat(t?.paddingBottom??`0`)||0;return Math.max(0,Math.round(e.clientHeight-n-r))}async getContent(){return this.docContent?this.docContent:(this.docContent=await(await this.fileParser.getTextDocument(this.url)).getPlaintext(),this.docContent.length>this.options.singleDocMaxSize?m.getTooBigHtmlTemplate(this.docContent.length):this.docContent)}async getFormattedVirtualDocument(){if(this.formattedVirtualDocument)return this.formattedVirtualDocument;let e=await this.fileParser.getTextDocument(this.url);return this.formattedVirtualDocument=await e.getFormattedDocument(),this.formattedVirtualDocument}async getText(e){return await(await this.fileParser.getTextDocument(this.url)).getPlaintext(e)}internalGetNumberOfPages(){let e=1;return this.getFlipMode()==`page`&&(e=this.pageCalculator.calcNumberOfPages()),e}async getNumberOfPages(){return await this.load(),this.internalGetNumberOfPages()}async getPageNumber(e){return this.pageCalculator.getPageNumber(e)}getContentRootElement(){return this.inIframe?this.iframe?.contentDocument?.documentElement:this.wrapperContainer}getContentContainer(){return this.inIframe?i.getDocumentBody(this.iframe?.contentDocument):this.wrapperContainer}async getVirtualContentContainer(e){if(e){let e=await this.fileParser.getTextDocument(this.url);return i.getDocumentBody(await e.getFormattedDocument())}let t=await this.getFormattedVirtualDocument();return i.getDocumentBody(t)}getVisibleElements(e){if(this.loadStatus!=`success`)return[];let t=this.getContentContainer(),n=t?.ownerDocument?.defaultView;if(!t||!n)return[];this.visibilityCandidates||=d.collectContentUnitElements(t,{htmlBlockTags:this.options.htmlBlockTags});let r=this.owner.getRenderer()?.getRendererContainer().getBoundingClientRect().top,i=l.resolveVisibleViewportInContentWindow(n,{topInset:r});return i?l.getOrderedElementsIntersectingRect(this.visibilityCandidates,i,{writingMode:f.getLayoutGeometry(this.options).writingMode,fullVisible:e}):[]}async dispose(){let t=this.captureLayoutState();this.owner.events.emit(e.EventNames.DocumentDisposing,this),this.unbindDocumentEvents(),this.resizeObserver.unobserveIframeSize(),this.callbacks?.splice(0),this.visibilityCandidates=null,this.retainLoadingLayer=!1,await this.releaseLoadingLayer();let n=this.getWrapperContainer();n.classList.add(s.HtmlSettings.FileContentContainerHeightClassName),this.iframe&&n.contains(this.iframe)&&n.removeChild(this.iframe),a.emptyElement(this.wrapperContainer),this.iframe=void 0,this.formattedVirtualDocument=null,await this.symbolCalclator.dispose(),await this.restoreLayoutState(t),await super.dispose()}bindDocumentEvents(){let e=this.inIframe?this.getContentContainer().ownerDocument:this.getContentRootElement();for(let t of this.eventKeyMap.keys())e.addEventListener(t,this.eventListener,this.capture)}unbindDocumentEvents(){let e=this.inIframe?this.getContentContainer()?.ownerDocument:this.getContentRootElement();if(e)for(let t of this.eventKeyMap.keys())e?.removeEventListener(t,this.eventListener,this.capture)}getFlipMode(){return this.options.forceScroll?`scroll`:this.options.flipMode}};exports.HtmlDocument=b;
|
|
@@ -5,13 +5,13 @@ import { readerPrefixName as r } from "../../../../kernal/Constants.mjs";
|
|
|
5
5
|
import { getDocumentBody as i } from "../../../../kernal/html/finder.mjs";
|
|
6
6
|
import { emptyElement as a, setElementHtml as o } from "../../../../kernal/html/dom.mjs";
|
|
7
7
|
import { yieldToMain as s } from "../../../../kernal/web/scheduler.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
8
|
+
import { HtmlSettings as c } from "../../HtmlSettings.mjs";
|
|
9
|
+
import { BaseDocument as l } from "../../../base/renderer/BaseDocument.mjs";
|
|
10
|
+
import { getOrderedElementsIntersectingRect as u, resolveVisibleViewportInContentWindow as d } from "../../../../kernal/html/geometry.mjs";
|
|
11
|
+
import { getEventKeyMap as f } from "../../../base/renderer/eventKeys.mjs";
|
|
12
|
+
import { collectContentUnitElements as p } from "../visibilityCandidates.mjs";
|
|
13
|
+
import { getLayoutGeometry as m } from "../layout/resolveLayoutRoute.mjs";
|
|
14
|
+
import { asHtmlFileParser as h } from "../../fileParser/IHtmlFileParser.mjs";
|
|
15
15
|
import { createIframe as g, getTooBigHtmlTemplate as _ } from "../html/template.mjs";
|
|
16
16
|
import { HtmlPageCalculator as v } from "./HtmlPageCalculator.mjs";
|
|
17
17
|
import { HtmlSymbolCalclator as y } from "./HtmlSymbolCalclator.mjs";
|
|
@@ -19,9 +19,9 @@ import { HtmlDocumentResizeObserver as b } from "./HtmlDocumentResizeObserver.mj
|
|
|
19
19
|
import { HtmlLayoutStatePreserver as x } from "../location/HtmlLayoutStatePreserver.mjs";
|
|
20
20
|
import { shouldKeepPageEndOnContentGrow as S } from "../location/remapStoredPageNumber.mjs";
|
|
21
21
|
//#region mediaTypes/html/renderer/document/HtmlDocument.ts
|
|
22
|
-
var C = class extends
|
|
22
|
+
var C = class extends l {
|
|
23
23
|
constructor(t, n, r, i, a, o) {
|
|
24
|
-
super(t, r, i, a), this.options = o, this.eventKeyMap =
|
|
24
|
+
super(t, r, i, a), this.options = o, this.eventKeyMap = f(), this.visibilityCandidates = null, this.callbacks = [], this.retainLoadingLayer = !1, this.pendingPageLayoutState = null, this.pageStripConcealed = !1, this.waitForRevealPaint = async () => {
|
|
25
25
|
await s(), await new Promise((e) => {
|
|
26
26
|
requestAnimationFrame(() => {
|
|
27
27
|
requestAnimationFrame(() => e());
|
|
@@ -95,8 +95,8 @@ var C = class extends d {
|
|
|
95
95
|
t.setAttribute("data-url", this.url);
|
|
96
96
|
let n = this.pendingPageLayoutState ?? this.captureLayoutState();
|
|
97
97
|
this.pendingPageLayoutState = null;
|
|
98
|
-
let r =
|
|
99
|
-
r || this.wrapperContainer.classList.remove(
|
|
98
|
+
let r = m(this.options).iframeGrow == "width";
|
|
99
|
+
r || this.wrapperContainer.classList.remove(c.FileContentContainerHeightClassName);
|
|
100
100
|
try {
|
|
101
101
|
let e = this.owner.getRenderer()?.documentPostprocesses ?? [];
|
|
102
102
|
for (let t of e) try {
|
|
@@ -104,12 +104,12 @@ var C = class extends d {
|
|
|
104
104
|
} catch (e) {
|
|
105
105
|
this.logger.error("postprocess", "function", t?.name, e);
|
|
106
106
|
}
|
|
107
|
-
await this.layoutStatePreserver.waitUntilPageTransformStable(), this.resetLayoutSizes(), r && this.wrapperContainer.classList.remove(
|
|
107
|
+
await this.layoutStatePreserver.waitUntilPageTransformStable(), this.resetLayoutSizes(), r && this.wrapperContainer.classList.remove(c.FileContentContainerHeightClassName), await this.layoutStatePreserver.restore(n);
|
|
108
108
|
} finally {
|
|
109
109
|
this.revealPendingPageStrip();
|
|
110
110
|
}
|
|
111
111
|
this.retainLoadingLayer || await this.releaseLoadingLayer(), this.loadStatus = "success", this.visibilityCandidates = null, this.bindDocumentEvents(), this.owner.events.emit(e.DocumentLoad, this), this.resizeObserver.observeIframeSize(async () => {
|
|
112
|
-
let e =
|
|
112
|
+
let e = m(this.options), t = S(this.owner.context.currentLocation, this.url), n = e.restoresScrollAfterResize || t, r = n ? this.captureLayoutState() : null;
|
|
113
113
|
if (this.resetLayoutSizes(), e.flipMode == "page" && this.pageCalculator.calcNumberOfPages(!0), n && r && (await this.restoreLayoutState(r), t)) {
|
|
114
114
|
let e = this.internalGetNumberOfPages(), t = this.owner.context.currentLocation;
|
|
115
115
|
t?.url == this.url && (t.current = e, t.total = e);
|
|
@@ -123,7 +123,7 @@ var C = class extends d {
|
|
|
123
123
|
}, this.capture = !0, this.eventListener = (e) => {
|
|
124
124
|
let t = this.eventKeyMap.get(e.type);
|
|
125
125
|
t && this.owner.events.emit(t, e, this);
|
|
126
|
-
}, this.pageCalculator = new v(this, n, o), this.symbolCalclator = new y(this,
|
|
126
|
+
}, this.pageCalculator = new v(this, n, o), this.symbolCalclator = new y(this, h(r).symbolMeasure), this.layoutStatePreserver = new x(this, n, o), this.logger = this.owner.loggerFactory.getLogger(this.constructor.name), this.resizeObserver = new b(this, this.owner.events);
|
|
127
127
|
}
|
|
128
128
|
get inIframe() {
|
|
129
129
|
return !0;
|
|
@@ -143,14 +143,14 @@ var C = class extends d {
|
|
|
143
143
|
if (this.inIframe) {
|
|
144
144
|
if (!this.iframe) {
|
|
145
145
|
let i = r + t(!0);
|
|
146
|
-
this.iframe = g(this.wrapperContainer.ownerDocument, i, this.options.forceScroll,
|
|
146
|
+
this.iframe = g(this.wrapperContainer.ownerDocument, i, this.options.forceScroll, m(this.options)), this.options.forceScroll ? this.iframe.removeAttribute("scrolling") : this.iframe.setAttribute("scrolling", "no");
|
|
147
147
|
let a = await this.buildLoadingContent();
|
|
148
148
|
await s(), this.wrapperContainer.appendChild(this.iframe), this.bringLoadingLayerToFront(), await s(), this.iframe.addEventListener("load", async () => {
|
|
149
149
|
await this.processAfterLoaded();
|
|
150
150
|
}, !1), this.iframe.addEventListener("error", (t) => {
|
|
151
151
|
this.revealPendingPageStrip(), this.retainLoadingLayer = !1, this.loadingLayer?.removeLoadingLayer(), this.loadStatus = "fail", this.iframe = void 0, this.loadingLayer?.setReloadButton(), this.logger.error(t), this.owner.events.emit(e.DocumentLoadFailed, this, t), this.loadCompleted(!0);
|
|
152
152
|
}, !1);
|
|
153
|
-
let o = this.iframe.contentDocument, c = this.captureLayoutState(), l =
|
|
153
|
+
let o = this.iframe.contentDocument, c = this.captureLayoutState(), l = m(this.options).flipMode == "page" && n.isSafari();
|
|
154
154
|
l && (this.pendingPageLayoutState = c, this.concealPageStrip()), this.options.preferSrcdoc && "srcdoc" in this.iframe || !("write" in o) ? this.iframe.srcdoc = a : (o.open(), o.write(a), o.close()), l || await this.restoreLayoutState(c), await s();
|
|
155
155
|
}
|
|
156
156
|
} else {
|
|
@@ -192,7 +192,7 @@ var C = class extends d {
|
|
|
192
192
|
resetIframeMinSize() {
|
|
193
193
|
let e = this.getContentRootElement();
|
|
194
194
|
if (!e || !this.iframe) return;
|
|
195
|
-
let t =
|
|
195
|
+
let t = m(this.options), n = i(e.ownerDocument);
|
|
196
196
|
this.iframe.style.removeProperty("transform"), this.iframe.style.removeProperty("will-change");
|
|
197
197
|
let r = this.owner.getRenderer()?.getRendererContainer(), a = parseFloat(r?.getAttribute("data-column-width") ?? "") || Math.round(this.iframe.getBoundingClientRect().width), o = parseFloat(r?.getAttribute("data-page-height") ?? "") || Math.round(this.iframe.getBoundingClientRect().height), s = parseFloat(r?.getAttribute("data-column-gap") ?? "");
|
|
198
198
|
t.sizeIframe({
|
|
@@ -250,10 +250,10 @@ var C = class extends d {
|
|
|
250
250
|
if (this.loadStatus != "success") return [];
|
|
251
251
|
let t = this.getContentContainer(), n = t?.ownerDocument?.defaultView;
|
|
252
252
|
if (!t || !n) return [];
|
|
253
|
-
this.visibilityCandidates ||=
|
|
254
|
-
let r = this.owner.getRenderer()?.getRendererContainer().getBoundingClientRect().top, i =
|
|
255
|
-
return i ?
|
|
256
|
-
writingMode:
|
|
253
|
+
this.visibilityCandidates ||= p(t, { htmlBlockTags: this.options.htmlBlockTags });
|
|
254
|
+
let r = this.owner.getRenderer()?.getRendererContainer().getBoundingClientRect().top, i = d(n, { topInset: r });
|
|
255
|
+
return i ? u(this.visibilityCandidates, i, {
|
|
256
|
+
writingMode: m(this.options).writingMode,
|
|
257
257
|
fullVisible: e
|
|
258
258
|
}) : [];
|
|
259
259
|
}
|
|
@@ -261,7 +261,7 @@ var C = class extends d {
|
|
|
261
261
|
let t = this.captureLayoutState();
|
|
262
262
|
this.owner.events.emit(e.DocumentDisposing, this), this.unbindDocumentEvents(), this.resizeObserver.unobserveIframeSize(), this.callbacks?.splice(0), this.visibilityCandidates = null, this.retainLoadingLayer = !1, await this.releaseLoadingLayer();
|
|
263
263
|
let n = this.getWrapperContainer();
|
|
264
|
-
n.classList.add(
|
|
264
|
+
n.classList.add(c.FileContentContainerHeightClassName), this.iframe && n.contains(this.iframe) && n.removeChild(this.iframe), a(this.wrapperContainer), this.iframe = void 0, this.formattedVirtualDocument = null, await this.symbolCalclator.dispose(), await this.restoreLayoutState(t), await super.dispose();
|
|
265
265
|
}
|
|
266
266
|
bindDocumentEvents() {
|
|
267
267
|
let e = this.inIframe ? this.getContentContainer().ownerDocument : this.getContentRootElement();
|