diff options
author | Chocobozzz <me@florianbigard.com> | 2020-06-23 14:10:17 +0200 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2020-06-23 16:00:49 +0200 |
commit | 67ed6552b831df66713bac9e672738796128d33f (patch) | |
tree | 59c97d41e0b49d75a90aa3de987968ab9b1ff447 /client/src/app/core/renderer/html-renderer.service.ts | |
parent | 0c4bacbff53bc732f5a2677d62a6ead7752e2405 (diff) | |
download | PeerTube-67ed6552b831df66713bac9e672738796128d33f.tar.gz PeerTube-67ed6552b831df66713bac9e672738796128d33f.tar.zst PeerTube-67ed6552b831df66713bac9e672738796128d33f.zip |
Reorganize client shared modules
Diffstat (limited to 'client/src/app/core/renderer/html-renderer.service.ts')
-rw-r--r-- | client/src/app/core/renderer/html-renderer.service.ts | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/client/src/app/core/renderer/html-renderer.service.ts b/client/src/app/core/renderer/html-renderer.service.ts new file mode 100644 index 000000000..f0527c759 --- /dev/null +++ b/client/src/app/core/renderer/html-renderer.service.ts | |||
@@ -0,0 +1,40 @@ | |||
1 | import { Injectable } from '@angular/core' | ||
2 | import { LinkifierService } from './linkifier.service' | ||
3 | |||
4 | @Injectable() | ||
5 | export class HtmlRendererService { | ||
6 | |||
7 | constructor (private linkifier: LinkifierService) { | ||
8 | |||
9 | } | ||
10 | |||
11 | async toSafeHtml (text: string) { | ||
12 | // FIXME: import('..') returns a struct module, containing a "default" field corresponding to our sanitizeHtml function | ||
13 | const sanitizeHtml: typeof import ('sanitize-html') = (await import('sanitize-html') as any).default | ||
14 | |||
15 | // Convert possible markdown to html | ||
16 | const html = this.linkifier.linkify(text) | ||
17 | |||
18 | return sanitizeHtml(html, { | ||
19 | allowedTags: [ 'a', 'p', 'span', 'br', 'strong', 'em', 'ul', 'ol', 'li' ], | ||
20 | allowedSchemes: [ 'http', 'https' ], | ||
21 | allowedAttributes: { | ||
22 | 'a': [ 'href', 'class', 'target', 'rel' ] | ||
23 | }, | ||
24 | transformTags: { | ||
25 | a: (tagName, attribs) => { | ||
26 | let rel = 'noopener noreferrer' | ||
27 | if (attribs.rel === 'me') rel += ' me' | ||
28 | |||
29 | return { | ||
30 | tagName, | ||
31 | attribs: Object.assign(attribs, { | ||
32 | target: '_blank', | ||
33 | rel | ||
34 | }) | ||
35 | } | ||
36 | } | ||
37 | } | ||
38 | }) | ||
39 | } | ||
40 | } | ||