@Injectable()
export class MarkdownService {
+ static TEXT_RULES = [
+ 'linkify',
+ 'autolink',
+ 'emphasis',
+ 'link',
+ 'newline',
+ 'list'
+ ]
+ static ENHANCED_RULES = MarkdownService.TEXT_RULES.concat([ 'image' ])
+
private textMarkdownIt: MarkdownIt.MarkdownIt
- private linkifier: MarkdownIt.MarkdownIt
private enhancedMarkdownIt: MarkdownIt.MarkdownIt
constructor () {
- this.textMarkdownIt = new MarkdownIt('zero', { linkify: true, breaks: true })
- .enable('linkify')
- .enable('autolink')
- .enable('emphasis')
- .enable('link')
- .enable('newline')
- .enable('list')
- this.setTargetToLinks(this.textMarkdownIt)
-
- this.enhancedMarkdownIt = new MarkdownIt('zero', { linkify: true, breaks: true })
- .enable('linkify')
- .enable('autolink')
- .enable('emphasis')
- .enable('link')
- .enable('newline')
- .enable('list')
- .enable('image')
- this.setTargetToLinks(this.enhancedMarkdownIt)
-
- this.linkifier = new MarkdownIt('zero', { linkify: true })
- .enable('linkify')
- this.setTargetToLinks(this.linkifier)
+ this.textMarkdownIt = this.createMarkdownIt(MarkdownService.TEXT_RULES)
+ this.enhancedMarkdownIt = this.createMarkdownIt(MarkdownService.ENHANCED_RULES)
}
textMarkdownToHTML (markdown: string) {
return this.avoidTruncatedLinks(html)
}
- linkify (text: string) {
- const html = this.linkifier.render(text)
+ private createMarkdownIt (rules: string[]) {
+ const markdownIt = new MarkdownIt('zero', { linkify: true, breaks: true })
- return this.avoidTruncatedLinks(html)
+ for (let rule of rules) {
+ markdownIt.enable(rule)
+ }
+
+ this.setTargetToLinks(markdownIt)
+
+ return markdownIt
}
private setTargetToLinks (markdownIt: MarkdownIt.MarkdownIt) {