@gewd/markdown
v1.0.0
Published
Angular Markdown render component, which uses a worker-process. > Only loads the worker, emoji-map, prism or additional languages once used inside the markdown.
Readme
@gewd/markdown
Angular Markdown render component, which uses a worker-process.
Only loads the worker, emoji-map, prism or additional languages once used inside the markdown.
Example
Install
npm i comlink marked xss prismjs @gewd/markdown --savenpm i --save-dev @types/marked @types/prismjs- add
MarkdownModuleto your AppModule (or the one where you want to use it) - In your app folder
ng g webWorker markdown const markdownWorker = () => new Worker( new URL('./markdown.worker.ts', import.meta.url), { name: 'markdown', type: "module" } ); /* in your app module */ @NgModule({ declarations: [AppComponent], imports: [ /* ...*/, MarkdownModule ], providers: [ { provide: MarkdownOptionsInjectorToken, useValue: { getWorker: markdownWorker, options: { prism: { ...DEFAULT_PRISM_OPTIONS, /** if needed **/ languageFileType: 'min.js', // if you want to use the minified assets languageMap: { // alias to load the real file ts: 'typescript', // default cs: 'csharp' // additional } } } } as MarkdownServiceOptions }, ] })- copy the content of one the included workers into your created one
Usage
.. as component
<gewd-markdown [markdown]="'your markdown or var'">
</gewd-markdown>.. as Service, add MarkdownService to your needed component and call:
constructor (private service: MarkdownService) {
}
async someMethod () {
const result = await this.service.compileMarkdown('some **markdown**');
}Included Worker (examples)
|Worker|Description|Requirements|
|----|----|-----|
|markdown-it.worker.ts| If you prefer markdown-it and its plugins |npm install markdown-it --save|
|marked.prism.worker.ts|Marked, needs xss-package to sanitize the generated HTML |npm install marked xss prismjs --save|
|marked.worker.ts|Marked, needs xss-package to sanitize the generated HTML |npm install marked xss --save|
mermaid.js support (using marked)
npm install mermaid --save
in angular.json in your app's assets: [ array
{
"glob": "mermaid.min.js",
"input": "node_modules/mermaid/dist/",
"output": "./"
} /* in your app module */
providers: [
{
provide: MarkdownOptionsInjectorToken,
useValue: {
// ... see other example
mermaidPath: 'mermaid.min.js', // path to where your mermaid.min.js-asset was copied
mermaidOptions: {
theme: 'neutral',
// and others see https://mermaid-js.github.io/mermaid/#/mermaidAPI?id=mermaidapi-configuration-defaults
}
}
}
]prismjs support (using marked)
Note: If you don't need it use the content of marked.worker.ts
npm install prismjs --save
in angular.json in your app's assets: [ array
{
"glob": "prism-@(c|csharp).js",
"input": "./node_modules/prismjs/components",
"output": "/assets/prism/"
}if you want to use the minified prism-files use .min.js in the glob-part and inside your PrismOptions (see LoadMarkdownWorkerInjectorToken-Example at the top)
in your app's styles: [ (or any other prismjs theme)
"node_modules/prismjs/themes/prism-okaidia.css"add the languages you want by changing @(c|csharp), if you just want to copy all languages use *
MarkdownCacheService
You can inject your own version of MarkdownCacheService by using the providers:
providers: [
MdCacheExampleService,
{
provide: MarkdownCacheService,
useExisting: MdCacheExampleService
}
],|Method|Description|
|----|----|
|getCached(raw)| Loads the cached version of raw|
|saveCached(raw, rendered)|Saves the rendered version of raw|
|getCachedPart|same as getCached just for parts|
|saveCachedPart|same as saveCached |
A hash is generated of raw to use as key to save/load the cached version.

