Remove the shadowViewer used with Page scrolling
				
					
				
			The only reason for using a `DocumentFragment` in the first place, originally added in PR 8724, was to prevent errors in the `PDFPageView`-constructor. However, we should be able to simply make its `container`-option *optional* instead, since it's not being used for anything else in the class. Note that pre-rendering still works correctly in my testing, and given that the `BaseViewer` keeps references to all `PDFPageView`-instances (via its `_pages` Array) it also shouldn't be possible to "lose" any pages/canvases this way.
This commit is contained in:
		
							parent
							
								
									0e7614df7f
								
							
						
					
					
						commit
						c18df2c61f
					
				| @ -148,6 +148,8 @@ function isSameScale(oldScale, newScale) { | |||||||
|  * Simple viewer control to display PDF content/pages. |  * Simple viewer control to display PDF content/pages. | ||||||
|  */ |  */ | ||||||
| class BaseViewer { | class BaseViewer { | ||||||
|  |   #scrollModePageState = null; | ||||||
|  | 
 | ||||||
|   /** |   /** | ||||||
|    * @param {PDFViewerOptions} options |    * @param {PDFViewerOptions} options | ||||||
|    */ |    */ | ||||||
| @ -531,9 +533,7 @@ class BaseViewer { | |||||||
|         this._optionalContentConfigPromise = optionalContentConfigPromise; |         this._optionalContentConfigPromise = optionalContentConfigPromise; | ||||||
| 
 | 
 | ||||||
|         const viewerElement = |         const viewerElement = | ||||||
|           this._scrollMode === ScrollMode.PAGE |           this._scrollMode === ScrollMode.PAGE ? null : this.viewer; | ||||||
|             ? this._scrollModePageState.shadowViewer |  | ||||||
|             : this.viewer; |  | ||||||
|         const scale = this.currentScale; |         const scale = this.currentScale; | ||||||
|         const viewport = firstPdfPage.getViewport({ |         const viewport = firstPdfPage.getViewport({ | ||||||
|           scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS, |           scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS, | ||||||
| @ -688,8 +688,7 @@ class BaseViewer { | |||||||
|     this._previousScrollMode = ScrollMode.UNKNOWN; |     this._previousScrollMode = ScrollMode.UNKNOWN; | ||||||
|     this._spreadMode = SpreadMode.NONE; |     this._spreadMode = SpreadMode.NONE; | ||||||
| 
 | 
 | ||||||
|     this._scrollModePageState = { |     this.#scrollModePageState = { | ||||||
|       shadowViewer: document.createDocumentFragment(), |  | ||||||
|       previousPageNumber: 1, |       previousPageNumber: 1, | ||||||
|       scrollDown: true, |       scrollDown: true, | ||||||
|       pages: [], |       pages: [], | ||||||
| @ -714,18 +713,12 @@ class BaseViewer { | |||||||
|       throw new Error("_ensurePageViewVisible: Invalid scrollMode value."); |       throw new Error("_ensurePageViewVisible: Invalid scrollMode value."); | ||||||
|     } |     } | ||||||
|     const pageNumber = this._currentPageNumber, |     const pageNumber = this._currentPageNumber, | ||||||
|       state = this._scrollModePageState, |       state = this.#scrollModePageState, | ||||||
|       viewer = this.viewer; |       viewer = this.viewer; | ||||||
| 
 | 
 | ||||||
|     // Remove the currently active pages, if any, from the viewer.
 |     // Temporarily remove all the pages from the DOM...
 | ||||||
|     if (viewer.hasChildNodes()) { |  | ||||||
|       // Temporarily remove all the pages from the DOM.
 |  | ||||||
|     viewer.textContent = ""; |     viewer.textContent = ""; | ||||||
| 
 |     // ... and clear out the active ones.
 | ||||||
|       for (const pageView of this._pages) { |  | ||||||
|         state.shadowViewer.appendChild(pageView.div); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     state.pages.length = 0; |     state.pages.length = 0; | ||||||
| 
 | 
 | ||||||
|     if (this._spreadMode === SpreadMode.NONE) { |     if (this._spreadMode === SpreadMode.NONE) { | ||||||
| @ -1249,7 +1242,7 @@ class BaseViewer { | |||||||
|     } |     } | ||||||
|     const views = |     const views = | ||||||
|         this._scrollMode === ScrollMode.PAGE |         this._scrollMode === ScrollMode.PAGE | ||||||
|           ? this._scrollModePageState.pages |           ? this.#scrollModePageState.pages | ||||||
|           : this._pages, |           : this._pages, | ||||||
|       horizontal = this._scrollMode === ScrollMode.HORIZONTAL, |       horizontal = this._scrollMode === ScrollMode.HORIZONTAL, | ||||||
|       rtl = horizontal && this._isContainerRtl; |       rtl = horizontal && this._isContainerRtl; | ||||||
| @ -1369,7 +1362,7 @@ class BaseViewer { | |||||||
|     } |     } | ||||||
|     switch (this._scrollMode) { |     switch (this._scrollMode) { | ||||||
|       case ScrollMode.PAGE: |       case ScrollMode.PAGE: | ||||||
|         return this._scrollModePageState.scrollDown; |         return this.#scrollModePageState.scrollDown; | ||||||
|       case ScrollMode.HORIZONTAL: |       case ScrollMode.HORIZONTAL: | ||||||
|         return this.scroll.right; |         return this.scroll.right; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -36,7 +36,7 @@ import { RenderingStates } from "./pdf_rendering_queue.js"; | |||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * @typedef {Object} PDFPageViewOptions |  * @typedef {Object} PDFPageViewOptions | ||||||
|  * @property {HTMLDivElement} container - The viewer element. |  * @property {HTMLDivElement} [container] - The viewer element. | ||||||
|  * @property {EventBus} eventBus - The application event bus. |  * @property {EventBus} eventBus - The application event bus. | ||||||
|  * @property {number} id - The page unique ID (normally its number). |  * @property {number} id - The page unique ID (normally its number). | ||||||
|  * @property {number} scale - The page scale display. |  * @property {number} scale - The page scale display. | ||||||
| @ -140,7 +140,7 @@ class PDFPageView { | |||||||
|     }); |     }); | ||||||
|     this.div = div; |     this.div = div; | ||||||
| 
 | 
 | ||||||
|     container.appendChild(div); |     container?.appendChild(div); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setPdfPage(pdfPage) { |   setPdfPage(pdfPage) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user