Skip to content

Commit

Permalink
Merge pull request #3218 from DSpace/backport-3112-to-dspace-8_x
Browse files Browse the repository at this point in the history
[Port dspace-8_x] [#3111] fix markdown rendering applying before mathjax rendering
  • Loading branch information
kshepherd authored Jul 25, 2024
2 parents 02e1e28 + 3c665a7 commit d423983
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 21 deletions.
4 changes: 2 additions & 2 deletions src/app/core/shared/client-math.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export class ClientMathService extends MathService {

protected mathJaxOptions = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
inlineMath: [['$', '$'], ['$$', '$$'], ['\\(', '\\)']],
},
svg: {
fontCache: 'global',
Expand Down Expand Up @@ -108,7 +108,7 @@ export class ClientMathService extends MathService {
*/
render(element: HTMLElement) {
if (environment.markdown.mathjax) {
this._window.nativeWindow.MathJax.typesetPromise([element]);
return (window as any).MathJax.typesetPromise([element]) as Promise<any>;
}
}
}
4 changes: 2 additions & 2 deletions src/app/core/shared/math.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export class MockMathService extends MathService {
return of(true);
}

render(element: HTMLElement): void {
return;
render(element: HTMLElement): Promise<any> {
return Promise.resolve();
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/app/core/shared/math.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ export abstract class MathService {

protected abstract registerMathJaxAsync(config: MathJaxConfig): Promise<any>;
abstract ready(): Observable<boolean>;
abstract render(element: HTMLElement): void;
abstract render(element: HTMLElement): Promise<any>;
}
2 changes: 1 addition & 1 deletion src/app/core/shared/server-math.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,6 @@ export class ServerMathService extends MathService {
}

render(element: HTMLElement) {
return;
return Promise.resolve();
}
}
40 changes: 25 additions & 15 deletions src/app/shared/utils/markdown.directive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,32 +55,42 @@ export class MarkdownDirective implements OnInit, OnDestroy {

async render(value: string, forcePreview = false): Promise<SafeHtml> {
if (isEmpty(value) || (!environment.markdown.enabled && !forcePreview)) {
return value;
}
const MarkdownIt = await this.markdownIt;
const md = new MarkdownIt({
html: true,
linkify: true,
});

const html = this.sanitizer.sanitize(SecurityContext.HTML, md.render(value));
this.el.innerHTML = html;

if (environment.markdown.mathjax) {
this.renderMathjax();
this.el.innerHTML = value;
return;
} else {
if (environment.markdown.mathjax) {
this.renderMathjaxThenMarkdown(value);
} else {
this.renderMarkdown(value);
}
}
}

private renderMathjax() {
private renderMathjaxThenMarkdown(value: string) {
const sanitized = this.sanitizer.sanitize(SecurityContext.HTML, value);
this.el.innerHTML = sanitized;
this.mathService.ready().pipe(
filter((ready) => ready),
take(1),
takeUntil(this.alive$),
).subscribe(() => {
this.mathService.render(this.el);
this.mathService.render(this.el)?.then(_ => {
this.renderMarkdown(this.el.innerHTML, true);
});
});
}

private async renderMarkdown(value: string, alreadySanitized = false) {
const MarkdownIt = await this.markdownIt;
const md = new MarkdownIt({
html: true,
linkify: true,
});

const html = alreadySanitized ? md.render(value) : this.sanitizer.sanitize(SecurityContext.HTML, md.render(value));
this.el.innerHTML = html;
}

ngOnDestroy() {
this.alive$.next(false);
}
Expand Down

0 comments on commit d423983

Please sign in to comment.