From a47b13ebc2d1b5db4d815ed9cde86278248cfaa7 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 17 Dec 2024 11:59:05 -0800 Subject: [PATCH] Small cleanup follow up on #236145 - Don't send content as json - Reuse existing load helper --- .../preview-src/index.ts | 21 +++++++++---------- .../preview-src/settings.ts | 8 +++++-- .../src/preview/documentRenderer.ts | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/extensions/markdown-language-features/preview-src/index.ts b/extensions/markdown-language-features/preview-src/index.ts index 336245a1fdf..f9a0abc4f53 100644 --- a/extensions/markdown-language-features/preview-src/index.ts +++ b/extensions/markdown-language-features/preview-src/index.ts @@ -7,7 +7,7 @@ import { ActiveLineMarker } from './activeLineMarker'; import { onceDocumentLoaded } from './events'; import { createPosterForVsCode } from './messaging'; import { getEditorLineNumberForPageOffset, scrollToRevealSourceLine, getLineElementForFragment } from './scroll-sync'; -import { SettingsManager, getData } from './settings'; +import { SettingsManager, getData, getRawData } from './settings'; import throttle = require('lodash.throttle'); import morphdom from 'morphdom'; import type { ToWebviewMessage } from '../types/previewMessaging'; @@ -61,8 +61,16 @@ function doAfterImagesLoaded(cb: () => void) { } onceDocumentLoaded(() => { - const scrollProgress = state.scrollProgress; + // Load initial html + const htmlParser = new DOMParser(); + const markDownHtml = htmlParser.parseFromString( + getRawData('data-initial-md-content'), + 'text/html' + ); + document.body.appendChild(markDownHtml.body); + // Restore + const scrollProgress = state.scrollProgress; addImageContexts(); if (typeof scrollProgress === 'number' && !settings.settings.fragment) { doAfterImagesLoaded(() => { @@ -353,15 +361,6 @@ document.addEventListener('click', event => { } }, true); -window.addEventListener('load', () => { - const htmlParser = new DOMParser(); - const markDownHtml = htmlParser.parseFromString( - decodeURIComponent(getData('data-md-content')), - 'text/html' - ); - document.body.appendChild(markDownHtml.body); -}); - window.addEventListener('scroll', throttle(() => { updateScrollProgress(); diff --git a/extensions/markdown-language-features/preview-src/settings.ts b/extensions/markdown-language-features/preview-src/settings.ts index 1bbe3477f25..0fb5d0c2686 100644 --- a/extensions/markdown-language-features/preview-src/settings.ts +++ b/extensions/markdown-language-features/preview-src/settings.ts @@ -16,18 +16,22 @@ export interface PreviewSettings { readonly webviewResourceRoot: string; } -export function getData(key: string): T { +export function getRawData(key: string): string { const element = document.getElementById('vscode-markdown-preview-data'); if (element) { const data = element.getAttribute(key); if (data) { - return JSON.parse(data); + return data; } } throw new Error(`Could not load data for ${key}`); } +export function getData(key: string): T { + return JSON.parse(getRawData(key)); +} + export class SettingsManager { private _settings: PreviewSettings = getData('data-settings'); diff --git a/extensions/markdown-language-features/src/preview/documentRenderer.ts b/extensions/markdown-language-features/src/preview/documentRenderer.ts index 13e709c765f..eeab8e19d9d 100644 --- a/extensions/markdown-language-features/src/preview/documentRenderer.ts +++ b/extensions/markdown-language-features/src/preview/documentRenderer.ts @@ -99,7 +99,7 @@ export class MdDocumentRenderer { data-settings="${escapeAttribute(JSON.stringify(initialData))}" data-strings="${escapeAttribute(JSON.stringify(previewStrings))}" data-state="${escapeAttribute(JSON.stringify(state || {}))}" - data-md-content="${escapeAttribute(JSON.stringify(encodeURIComponent(body.html)))}"> + data-initial-md-content="${escapeAttribute(body.html)}"> ${this._getStyles(resourceProvider, sourceUri, config, imageInfo)}