Fix markdown images having duplicate ids (#157177)

Fixes #153144
This commit is contained in:
Matt Bierner
2022-08-04 21:31:42 -07:00
committed by GitHub
parent 5589b81019
commit b012216211
5 changed files with 20 additions and 42 deletions

View File

@@ -11,7 +11,6 @@ import { MarkdownContributionProvider } from './markdownExtensions';
import { Slugifier } from './slugify';
import { ITextDocument } from './types/textDocument';
import { Disposable } from './util/dispose';
import { stringHash } from './util/hash';
import { WebviewResourceProvider } from './util/resources';
import { isOfScheme, Schemes } from './util/schemes';
import { MdDocumentInfoCache } from './util/workspaceCache';
@@ -86,11 +85,11 @@ class TokenCache {
export interface RenderOutput {
html: string;
containingImages: { src: string }[];
containingImages: Set<string>;
}
interface RenderEnv {
containingImages: { src: string }[];
containingImages: Set<string>;
currentDocument: vscode.Uri | undefined;
resourceProvider: WebviewResourceProvider | undefined;
}
@@ -209,7 +208,7 @@ export class MarkdownItEngine implements IMdParser {
: this.tokenizeDocument(input, config, engine);
const env: RenderEnv = {
containingImages: [],
containingImages: new Set<string>(),
currentDocument: typeof input === 'string' ? undefined : input.uri,
resourceProvider,
};
@@ -248,13 +247,9 @@ export class MarkdownItEngine implements IMdParser {
const original = md.renderer.rules.image;
md.renderer.rules.image = (tokens: Token[], idx: number, options, env: RenderEnv, self) => {
const token = tokens[idx];
token.attrJoin('class', 'loading');
const src = token.attrGet('src');
if (src) {
env.containingImages?.push({ src });
const imgHash = stringHash(src);
token.attrSet('id', `image-hash-${imgHash}`);
env.containingImages?.add(src);
if (!token.attrGet('data-src')) {
token.attrSet('src', this.toResourceUri(src, env.currentDocument, env.resourceProvider));