diff options
author | Rigel Kent <sendmemail@rigelk.eu> | 2019-12-16 16:21:42 +0100 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2019-12-17 09:45:02 +0100 |
commit | b29bf61dbd518e5cef0b2f564ddc8f8a0657d089 (patch) | |
tree | 86d41fb765ea529095d757e292213156cef7d899 /client/src/app/shared/renderer | |
parent | d68ebf0b4a40f88e53a78de6b3109a41466fa7c6 (diff) | |
download | PeerTube-b29bf61dbd518e5cef0b2f564ddc8f8a0657d089.tar.gz PeerTube-b29bf61dbd518e5cef0b2f564ddc8f8a0657d089.tar.zst PeerTube-b29bf61dbd518e5cef0b2f564ddc8f8a0657d089.zip |
Provide native links for description timestamps, and re-clickability for these
Diffstat (limited to 'client/src/app/shared/renderer')
-rw-r--r-- | client/src/app/shared/renderer/markdown.service.ts | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/client/src/app/shared/renderer/markdown.service.ts b/client/src/app/shared/renderer/markdown.service.ts index f6b71b88a..0d3fde537 100644 --- a/client/src/app/shared/renderer/markdown.service.ts +++ b/client/src/app/shared/renderer/markdown.service.ts | |||
@@ -75,6 +75,14 @@ export class MarkdownService { | |||
75 | return this.render('completeMarkdownIt', markdown) | 75 | return this.render('completeMarkdownIt', markdown) |
76 | } | 76 | } |
77 | 77 | ||
78 | async processVideoTimestamps (html: string) { | ||
79 | return html.replace(/((\d{1,2}):)?(\d{1,2}):(\d{1,2})/g, function (str, _, h, m, s) { | ||
80 | const t = (3600 * +(h || 0)) + (60 * +(m || 0)) + (+(s || 0)) | ||
81 | const url = buildVideoLink({ startTime: t }) | ||
82 | return `<a class="video-timestamp" href="${url}">${str}</a>` | ||
83 | }) | ||
84 | } | ||
85 | |||
78 | private async render (name: keyof MarkdownParsers, markdown: string) { | 86 | private async render (name: keyof MarkdownParsers, markdown: string) { |
79 | if (!markdown) return '' | 87 | if (!markdown) return '' |
80 | 88 | ||
@@ -91,14 +99,6 @@ export class MarkdownService { | |||
91 | return html | 99 | return html |
92 | } | 100 | } |
93 | 101 | ||
94 | async processVideoTimestamps (html: string) { | ||
95 | return html.replace(/((\d{1,2}):)?(\d{1,2}):(\d{1,2})/g, function (str, _, h, m, s) { | ||
96 | const t = (3600 * +(h || 0)) + (60 * +(m || 0)) + (+(s || 0)) | ||
97 | const url = buildVideoLink({ startTime: t }) | ||
98 | return `<a href="${url}">${str}</a>` | ||
99 | }) | ||
100 | } | ||
101 | |||
102 | private async createMarkdownIt (config: MarkdownConfig) { | 102 | private async createMarkdownIt (config: MarkdownConfig) { |
103 | // FIXME: import('...') returns a struct module, containing a "default" field corresponding to our sanitizeHtml function | 103 | // FIXME: import('...') returns a struct module, containing a "default" field corresponding to our sanitizeHtml function |
104 | const MarkdownItClass: typeof import ('markdown-it') = (await import('markdown-it') as any).default | 104 | const MarkdownItClass: typeof import ('markdown-it') = (await import('markdown-it') as any).default |
@@ -139,7 +139,7 @@ export class MarkdownService { | |||
139 | private avoidTruncatedTags (html: string) { | 139 | private avoidTruncatedTags (html: string) { |
140 | return html.replace(/\*\*?([^*]+)$/, '$1') | 140 | return html.replace(/\*\*?([^*]+)$/, '$1') |
141 | .replace(/<a[^>]+>([^<]+)<\/a>\s*...((<\/p>)|(<\/li>)|(<\/strong>))?$/mi, '$1...') | 141 | .replace(/<a[^>]+>([^<]+)<\/a>\s*...((<\/p>)|(<\/li>)|(<\/strong>))?$/mi, '$1...') |
142 | .replace(/\[[^\]]+\]?\(?([^\)]+)$/, '$1') | 142 | .replace(/\[[^\]]+\]\(([^\)]+)$/m, '$1') |
143 | .replace(/\s?\[[^\]]+\]?[.]{3}<\/p>$/m, '...</p>') | 143 | .replace(/\s?\[[^\]]+\]?[.]{3}<\/p>$/m, '...</p>') |
144 | } | 144 | } |
145 | } | 145 | } |