(scale: number, displayWidth: number, displayHeight: number)
| 865 | } |
| 866 | |
| 867 | private renderSingleSlide(scale: number, displayWidth: number, displayHeight: number): void { |
| 868 | if (!this.presentation) return |
| 869 | |
| 870 | const slide = this.presentation.slides[this.currentSlide] |
| 871 | if (!slide) return |
| 872 | |
| 873 | for (const handle of this.slideHandles.values()) { |
| 874 | handle.dispose() |
| 875 | } |
| 876 | this.slideHandles.clear() |
| 877 | this.disposeAllCharts() |
| 878 | this.container.innerHTML = '' |
| 879 | this.mountedSlides.clear() |
| 880 | this.mountedSlides.add(this.currentSlide) |
| 881 | |
| 882 | const wrapper = document.createElement('div') |
| 883 | wrapper.style.cssText = ` |
| 884 | width: ${displayWidth}px; height: ${displayHeight}px; |
| 885 | margin: 0 auto; overflow: hidden; position: relative; |
| 886 | box-shadow: 0 2px 8px rgba(0,0,0,0.15); |
| 887 | ` |
| 888 | |
| 889 | try { |
| 890 | const handle = renderSlideInternal(this.presentation, slide, { |
| 891 | onNodeError: (nodeId, error) => this.emitNodeError(nodeId, error), |
| 892 | onNavigate: (target) => this.handleNavigate(target), |
| 893 | mediaUrlCache: this.mediaUrlCache, |
| 894 | chartInstances: this.chartInstances, |
| 895 | }) |
| 896 | this.slideHandles.set(this.currentSlide, handle) |
| 897 | handle.element.style.transform = `scale(${scale})` |
| 898 | handle.element.style.transformOrigin = 'top left' |
| 899 | wrapper.appendChild(handle.element) |
| 900 | this.emitSlideRendered(this.currentSlide, handle.element) |
| 901 | } catch (e) { |
| 902 | this.emitSlideError(this.currentSlide, e) |
| 903 | wrapper.style.background = '#fff3f3' |
| 904 | wrapper.style.display = 'flex' |
| 905 | wrapper.style.alignItems = 'center' |
| 906 | wrapper.style.justifyContent = 'center' |
| 907 | wrapper.style.border = '2px dashed #ff6b6b' |
| 908 | wrapper.style.color = '#cc0000' |
| 909 | wrapper.style.fontSize = '14px' |
| 910 | wrapper.textContent = `Slide ${this.currentSlide + 1}: Render Error - ${getErrorMessage(e)}` |
| 911 | } |
| 912 | |
| 913 | this.container.appendChild(wrapper) |
| 914 | this.afterSingleSlideRender() |
| 915 | } |
| 916 | |
| 917 | /** |
| 918 | * After list-mode rendering, a scrollbar may appear on the page body |
no test coverage detected