UNPKG

@cisstech/nge

Version:

NG Essentials is a collection of libraries for Angular developers.

92 lines 12.4 kB
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'; import { NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'; import * as i0 from "@angular/core"; /** Custom options to pass to NgeMarkdownKatex contribution. */ export const NGE_MARKDOWN_KATEX_OPTIONS = new InjectionToken('NGE_MARKDOWN_KATEX_OPTIONS'); /** * Contribution to render math expressions in markdown using [Katex](https://katex.org) library. */ export class NgeMarkdownKatex { constructor(options) { this.options = options; this.options = options || { extensions: { mhchem: true, copyTex: true, }, }; this.options.extensions = this.options.extensions || {}; this.options.extensions.mhchem = this.options.extensions.mhchem ?? true; this.options.extensions.copyTex = this.options.extensions.copyTex ?? true; } dependencies() { if ('katex' in window) { return []; } let baseUrl = this.options?.baseUrl || 'https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/'; if (!baseUrl.endsWith('/')) { baseUrl += '/'; } const deps = [ ['style', `${baseUrl}katex.min.css`], ['script', `${baseUrl}katex.js`], ['script', `${baseUrl}contrib/auto-render.js`], ]; if (this.options.extensions?.copyTex) { deps.push(['script', `${baseUrl}contrib/copy-tex.min.js`]); } if (this.options.extensions?.mhchem) { deps.push(['script', `${baseUrl}contrib/mhchem.js`]); } return deps; } contribute(transformer) { // pattern to search multiline latex between $$...$$ or inline latex between $...$ // const pattern = /(\$\$\n((.|\s|\n)+?)\n\$\$)|(\$([^\s][^$\n]+?[^\s])\$)/gm; transformer.addHtmlTransformer((element) => { const { renderMathInElement } = window; try { renderMathInElement(element, this.options.options || { delimiters: [ { left: '$$', right: '$$', display: false }, { left: '$', right: '$', display: false }, { left: '\\(', right: '\\)', display: false }, { left: '\\[', right: '\\]', display: false }, ], }); } catch (error) { console.error(error); } }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownKatex, deps: [{ token: NGE_MARKDOWN_KATEX_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownKatex }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownKatex, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NGE_MARKDOWN_KATEX_OPTIONS] }] }] }); /** * Provider to render math expressions in markdown using [Katex](https://katex.org) library. */ export const NgeMarkdownKatexProvider = { provide: NGE_MARKDOWN_CONTRIBUTION, multi: true, useClass: NgeMarkdownKatex, }; /** * Provider to pass options to `NgeMarkdownKatex` contribution. * @param options `NgeMarkdownKatex` options. */ export function NgeMarkdownKatexOptionsProvider(options) { return { provide: NGE_MARKDOWN_KATEX_OPTIONS, useValue: options, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdlLW1hcmtkb3duLWthdGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdlL21hcmtkb3duL3NyYy9jb250cmlidXRpb25zL25nZS1tYXJrZG93bi1rYXRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFBO0FBRXRGLE9BQU8sRUFBMkIseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTs7QUFpQmpHLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGNBQWMsQ0FBMEIsNEJBQTRCLENBQUMsQ0FBQTtBQUVuSDs7R0FFRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFHbUIsT0FBZ0M7UUFBaEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFFakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUk7WUFDeEIsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE9BQU8sRUFBRSxJQUFJO2FBQ2Q7U0FDRixDQUFBO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFBO1FBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFBO0lBQzNFLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdEIsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksaURBQWlELENBQUE7UUFDeEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLElBQUksR0FBRyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRztZQUNYLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxlQUFlLENBQUM7WUFDcEMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUFPLFVBQVUsQ0FBQztZQUNoQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE9BQU8sd0JBQXdCLENBQUM7U0FDL0MsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE9BQU8seUJBQXlCLENBQUMsQ0FBQyxDQUFBO1FBQzVELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBRUQsT0FBTyxJQUFXLENBQUE7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFtQztRQUM1QyxrRkFBa0Y7UUFDbEYsOEVBQThFO1FBQzlFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3pDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQWEsQ0FBQTtZQUM3QyxJQUFJLENBQUM7Z0JBQ0gsbUJBQW1CLENBQ2pCLE9BQU8sRUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSTtvQkFDdEIsVUFBVSxFQUFFO3dCQUNWLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7d0JBQzNDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7d0JBQ3pDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7d0JBQzdDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7cUJBQzlDO2lCQUNGLENBQ0YsQ0FBQTtZQUNILENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDdEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs4R0FqRVUsZ0JBQWdCLGtCQUdqQiwwQkFBMEI7a0hBSHpCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBR04sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQywwQkFBMEI7O0FBaUV0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFhO0lBQ2hELE9BQU8sRUFBRSx5QkFBeUI7SUFDbEMsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsZ0JBQWdCO0NBQzNCLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQUMsT0FBZ0M7SUFDOUUsT0FBTztRQUNMLE9BQU8sRUFBRSwwQkFBMEI7UUFDbkMsUUFBUSxFQUFFLE9BQU87S0FDbEIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdlTWFya2Rvd25UcmFuc2Zvcm1lciB9IGZyb20gJy4uL25nZS1tYXJrZG93bi10cmFuc2Zvcm1lcidcbmltcG9ydCB7IE5nZU1hcmtkb3duQ29udHJpYnV0aW9uLCBOR0VfTUFSS0RPV05fQ09OVFJJQlVUSU9OIH0gZnJvbSAnLi4vbmdlLW1hcmtkb3duLWNvbnRyaWJ1dGlvbidcblxuLyoqIEN1c3RvbSBvcHRpb25zIHRvIHBhc3MgdG8gTmdlTWFya2Rvd25LYXRleCBjb250cmlidXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE5nZU1hcmtkb3duS2F0ZXhPcHRpb25zIHtcbiAgLyoqIEJhc2UgdXJsIHRvIGxvYWQga2F0ZXggc2NyaXB0cyBhbmQgc3R5bGVzLiAoZGVmYXVsdCBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTUuMS9kaXN0KSAqL1xuICBiYXNlVXJsPzogc3RyaW5nXG4gIC8qKiBPcHRpb25zIHRvIHBhc3MgdG8ga2F0ZXggcmVuZGVyIGZ1bmN0aW9uLiBodHRwczovL2thdGV4Lm9yZy9kb2NzL29wdGlvbnMuaHRtbCAqL1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PlxuICAvKiogS2F0ZXggZXh0ZW5zaW9ucyB0byBpbmNsdWRlLiBodHRwczovL2thdGV4Lm9yZy9kb2NzL2xpYnMuaHRtbCAgKi9cbiAgZXh0ZW5zaW9ucz86IHtcbiAgICAvKiogaHR0cHM6Ly9naXRodWIuY29tL0toYW4vS2FUZVgvdHJlZS9tYXN0ZXIvY29udHJpYi9taGNoZW0gKGRlZmF1bHQgdG8gYHRydWVgKSAqL1xuICAgIG1oY2hlbT86IGJvb2xlYW5cbiAgICAvKiogaHR0cHM6Ly9naXRodWIuY29tL0toYW4vS2FUZVgvdHJlZS9tYXN0ZXIvY29udHJpYi9jb3B5LXRleCAoZGVmYXVsdCB0byBgdHJ1ZWApICovXG4gICAgY29weVRleD86IGJvb2xlYW5cbiAgfVxufVxuXG4vKiogQ3VzdG9tIG9wdGlvbnMgdG8gcGFzcyB0byBOZ2VNYXJrZG93bkthdGV4IGNvbnRyaWJ1dGlvbi4gKi9cbmV4cG9ydCBjb25zdCBOR0VfTUFSS0RPV05fS0FURVhfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ2VNYXJrZG93bkthdGV4T3B0aW9ucz4oJ05HRV9NQVJLRE9XTl9LQVRFWF9PUFRJT05TJylcblxuLyoqXG4gKiBDb250cmlidXRpb24gdG8gcmVuZGVyIG1hdGggZXhwcmVzc2lvbnMgaW4gbWFya2Rvd24gdXNpbmcgW0thdGV4XShodHRwczovL2thdGV4Lm9yZykgbGlicmFyeS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nZU1hcmtkb3duS2F0ZXggaW1wbGVtZW50cyBOZ2VNYXJrZG93bkNvbnRyaWJ1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChOR0VfTUFSS0RPV05fS0FURVhfT1BUSU9OUylcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5nZU1hcmtkb3duS2F0ZXhPcHRpb25zXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge1xuICAgICAgZXh0ZW5zaW9uczoge1xuICAgICAgICBtaGNoZW06IHRydWUsXG4gICAgICAgIGNvcHlUZXg6IHRydWUsXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zIHx8IHt9XG4gICAgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMubWhjaGVtID0gdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMubWhjaGVtID8/IHRydWVcbiAgICB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5jb3B5VGV4ID0gdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuY29weVRleCA/PyB0cnVlXG4gIH1cblxuICBkZXBlbmRlbmNpZXMoKSB7XG4gICAgaWYgKCdrYXRleCcgaW4gd2luZG93KSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBsZXQgYmFzZVVybCA9IHRoaXMub3B0aW9ucz8uYmFzZVVybCB8fCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjQvZGlzdC8nXG4gICAgaWYgKCFiYXNlVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIGJhc2VVcmwgKz0gJy8nXG4gICAgfVxuXG4gICAgY29uc3QgZGVwcyA9IFtcbiAgICAgIFsnc3R5bGUnLCBgJHtiYXNlVXJsfWthdGV4Lm1pbi5jc3NgXSxcbiAgICAgIFsnc2NyaXB0JywgYCR7YmFzZVVybH1rYXRleC5qc2BdLFxuICAgICAgWydzY3JpcHQnLCBgJHtiYXNlVXJsfWNvbnRyaWIvYXV0by1yZW5kZXIuanNgXSxcbiAgICBdXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LmNvcHlUZXgpIHtcbiAgICAgIGRlcHMucHVzaChbJ3NjcmlwdCcsIGAke2Jhc2VVcmx9Y29udHJpYi9jb3B5LXRleC5taW4uanNgXSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/Lm1oY2hlbSkge1xuICAgICAgZGVwcy5wdXNoKFsnc2NyaXB0JywgYCR7YmFzZVVybH1jb250cmliL21oY2hlbS5qc2BdKVxuICAgIH1cblxuICAgIHJldHVybiBkZXBzIGFzIGFueVxuICB9XG5cbiAgY29udHJpYnV0ZSh0cmFuc2Zvcm1lcjogTmdlTWFya2Rvd25UcmFuc2Zvcm1lcikge1xuICAgIC8vIHBhdHRlcm4gdG8gc2VhcmNoIG11bHRpbGluZSBsYXRleCBiZXR3ZWVuICQkLi4uJCQgb3IgaW5saW5lIGxhdGV4IGJldHdlZW4gJC4uLiRcbiAgICAvLyBjb25zdCBwYXR0ZXJuID0gLyhcXCRcXCRcXG4oKC58XFxzfFxcbikrPylcXG5cXCRcXCQpfChcXCQoW15cXHNdW14kXFxuXSs/W15cXHNdKVxcJCkvZ207XG4gICAgdHJhbnNmb3JtZXIuYWRkSHRtbFRyYW5zZm9ybWVyKChlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCB7IHJlbmRlck1hdGhJbkVsZW1lbnQgfSA9IHdpbmRvdyBhcyBhbnlcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlbmRlck1hdGhJbkVsZW1lbnQoXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9ucyB8fCB7XG4gICAgICAgICAgICBkZWxpbWl0ZXJzOiBbXG4gICAgICAgICAgICAgIHsgbGVmdDogJyQkJywgcmlnaHQ6ICckJCcsIGRpc3BsYXk6IGZhbHNlIH0sXG4gICAgICAgICAgICAgIHsgbGVmdDogJyQnLCByaWdodDogJyQnLCBkaXNwbGF5OiBmYWxzZSB9LFxuICAgICAgICAgICAgICB7IGxlZnQ6ICdcXFxcKCcsIHJpZ2h0OiAnXFxcXCknLCBkaXNwbGF5OiBmYWxzZSB9LFxuICAgICAgICAgICAgICB7IGxlZnQ6ICdcXFxcWycsIHJpZ2h0OiAnXFxcXF0nLCBkaXNwbGF5OiBmYWxzZSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVyIHRvIHJlbmRlciBtYXRoIGV4cHJlc3Npb25zIGluIG1hcmtkb3duIHVzaW5nIFtLYXRleF0oaHR0cHM6Ly9rYXRleC5vcmcpIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBOZ2VNYXJrZG93bkthdGV4UHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR0VfTUFSS0RPV05fQ09OVFJJQlVUSU9OLFxuICBtdWx0aTogdHJ1ZSxcbiAgdXNlQ2xhc3M6IE5nZU1hcmtkb3duS2F0ZXgsXG59XG5cbi8qKlxuICogUHJvdmlkZXIgdG8gcGFzcyBvcHRpb25zIHRvIGBOZ2VNYXJrZG93bkthdGV4YCBjb250cmlidXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyBgTmdlTWFya2Rvd25LYXRleGAgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE5nZU1hcmtkb3duS2F0ZXhPcHRpb25zUHJvdmlkZXIob3B0aW9uczogTmdlTWFya2Rvd25LYXRleE9wdGlvbnMpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogTkdFX01BUktET1dOX0tBVEVYX09QVElPTlMsXG4gICAgdXNlVmFsdWU6IG9wdGlvbnMsXG4gIH1cbn1cbiJdfQ==