Skip to content

Commit

Permalink
Backport PR #15810: When attaching only typeset after rendering is co…
Browse files Browse the repository at this point in the history
…mpleted (#15879)

Co-authored-by: Michał Krassowski <5832902+krassowski@users.noreply.github.com>
  • Loading branch information
meeseeksmachine and krassowski committed Feb 29, 2024
1 parent 1acff4b commit 838a81b
Showing 1 changed file with 48 additions and 20 deletions.
68 changes: 48 additions & 20 deletions packages/rendermime/src/widgets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ export class RenderedHTML extends RenderedHTMLCommon {
* @returns A promise which resolves when rendering is complete.
*/
render(model: IRenderMime.IMimeModel): Promise<void> {
return renderers.renderHTML({
return (this._rendered = renderers.renderHTML({
host: this.node,
source: String(model.data[this.mimeType]),
trusted: model.trusted,
Expand All @@ -194,17 +194,24 @@ export class RenderedHTML extends RenderedHTMLCommon {
shouldTypeset: this.isAttached,
latexTypesetter: this.latexTypesetter,
translator: this.translator
});
}));
}

/**
* A message handler invoked on an `'after-attach'` message.
*/
onAfterAttach(msg: Message): void {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
this._rendered
.then(() => {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
})
.catch(console.warn);
}

// A promise which resolves when most recent rendering is complete.
private _rendered: Promise<void> = Promise.resolve();
}

/**
Expand All @@ -229,22 +236,29 @@ export class RenderedLatex extends RenderedCommon {
* @returns A promise which resolves when rendering is complete.
*/
render(model: IRenderMime.IMimeModel): Promise<void> {
return renderers.renderLatex({
return (this._rendered = renderers.renderLatex({
host: this.node,
source: String(model.data[this.mimeType]),
shouldTypeset: this.isAttached,
latexTypesetter: this.latexTypesetter
});
}));
}

/**
* A message handler invoked on an `'after-attach'` message.
*/
onAfterAttach(msg: Message): void {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
this._rendered
.then(() => {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
})
.catch(console.warn);
}

// A promise which resolves when most recent rendering is complete.
private _rendered: Promise<void> = Promise.resolve();
}

/**
Expand Down Expand Up @@ -306,7 +320,7 @@ export class RenderedMarkdown extends RenderedHTMLCommon {
* @returns A promise which resolves when rendering is complete.
*/
render(model: IRenderMime.IMimeModel): Promise<void> {
return renderers.renderMarkdown({
return (this._rendered = renderers.renderMarkdown({
host: this.node,
source: String(model.data[this.mimeType]),
trusted: model.trusted,
Expand All @@ -317,7 +331,7 @@ export class RenderedMarkdown extends RenderedHTMLCommon {
latexTypesetter: this.latexTypesetter,
markdownParser: this.markdownParser,
translator: this.translator
});
}));
}

/**
Expand All @@ -335,10 +349,17 @@ export class RenderedMarkdown extends RenderedHTMLCommon {
* A message handler invoked on an `'after-attach'` message.
*/
onAfterAttach(msg: Message): void {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
this._rendered
.then(() => {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
})
.catch(console.warn);
}

// A promise which resolves when most recent rendering is complete.
private _rendered: Promise<void> = Promise.resolve();
}

/**
Expand Down Expand Up @@ -366,23 +387,30 @@ export class RenderedSVG extends RenderedCommon {
const metadata = model.metadata[this.mimeType] as
| ReadonlyJSONObject
| undefined;
return renderers.renderSVG({
return (this._rendered = renderers.renderSVG({
host: this.node,
source: String(model.data[this.mimeType]),
trusted: model.trusted,
unconfined: metadata && (metadata.unconfined as boolean | undefined),
translator: this.translator
});
}));
}

/**
* A message handler invoked on an `'after-attach'` message.
*/
onAfterAttach(msg: Message): void {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
this._rendered
.then(() => {
if (this.latexTypesetter) {
this.latexTypesetter.typeset(this.node);
}
})
.catch(console.warn);
}

// A promise which resolves when most recent rendering is complete.
private _rendered: Promise<void> = Promise.resolve();
}

/**
Expand Down

0 comments on commit 838a81b

Please sign in to comment.