--- /dev/null
+import { SANITIZE_OPTIONS, TEXT_WITH_HTML_RULES } from '@shared/core-utils'
+
+const sanitizeHtml = require('sanitize-html')
+const markdownItEmoji = require('markdown-it-emoji/light')
+const MarkdownItClass = require('markdown-it')
+const markdownIt = new MarkdownItClass('default', { linkify: true, breaks: true, html: true })
+
+markdownIt.enable(TEXT_WITH_HTML_RULES)
+markdownIt.use(markdownItEmoji)
+
+const toSafeHtml = text => {
+ // Restore line feed
+ const textWithLineFeed = text.replace(/<br.?\/?>/g, '\r\n')
+
+ // Convert possible markdown (emojis, emphasis and lists) to html
+ const html = markdownIt.render(textWithLineFeed)
+
+ // Convert to safe Html
+ return sanitizeHtml(html, SANITIZE_OPTIONS)
+}
+
+// ---------------------------------------------------------------------------
+
+export {
+ toSafeHtml
+}
import { getActivityStreamDuration } from '../models/video/video-format-utils'
import { VideoPlaylistModel } from '../models/video/video-playlist'
import { MAccountActor, MChannelActor } from '../types/models'
+import { toSafeHtml } from '../helpers/markdown'
type Tags = {
ogType: string
}
}
+const toPlainText = (content: string) => {
+ return toSafeHtml(content).replace(/<[^>]+>/g, '')
+}
+
class ClientHtml {
private static htmlCache: { [path: string]: string } = {}
}
let customHtml = ClientHtml.addTitleTag(html, escapeHTML(video.name))
- customHtml = ClientHtml.addDescriptionTag(customHtml, escapeHTML(video.description))
+ customHtml = ClientHtml.addDescriptionTag(customHtml, toPlainText(video.description))
const url = WEBSERVER.URL + video.getWatchStaticPath()
const originUrl = video.url
const title = escapeHTML(video.name)
const siteName = escapeHTML(CONFIG.INSTANCE.NAME)
- const description = escapeHTML(video.description)
+ const description = toPlainText(video.description)
const image = {
url: WEBSERVER.URL + video.getPreviewStaticPath()
}
let customHtml = ClientHtml.addTitleTag(html, escapeHTML(videoPlaylist.name))
- customHtml = ClientHtml.addDescriptionTag(customHtml, escapeHTML(videoPlaylist.description))
+ customHtml = ClientHtml.addDescriptionTag(customHtml, toPlainText(videoPlaylist.description))
const url = videoPlaylist.getWatchUrl()
const originUrl = videoPlaylist.url
const title = escapeHTML(videoPlaylist.name)
const siteName = escapeHTML(CONFIG.INSTANCE.NAME)
- const description = escapeHTML(videoPlaylist.description)
+ const description = toPlainText(videoPlaylist.description)
const image = {
url: videoPlaylist.getThumbnailUrl()
}
let customHtml = ClientHtml.addTitleTag(html, escapeHTML(entity.getDisplayName()))
- customHtml = ClientHtml.addDescriptionTag(customHtml, escapeHTML(entity.description))
+ customHtml = ClientHtml.addDescriptionTag(customHtml, toPlainText(entity.description))
const url = entity.getLocalUrl()
const originUrl = entity.Actor.url
const siteName = escapeHTML(CONFIG.INSTANCE.NAME)
const title = escapeHTML(entity.getDisplayName())
- const description = escapeHTML(entity.description)
+ const description = toPlainText(entity.description)
const image = {
url: entity.Actor.getAvatarUrl(),
import { VideoChannelModel } from '@server/models/video/video-channel'
import { MVideoBlacklistLightVideo, MVideoBlacklistVideo } from '@server/types/models/video/video-blacklist'
import { MVideoImport, MVideoImportVideo } from '@server/types/models/video/video-import'
-import { SANITIZE_OPTIONS, TEXT_WITH_HTML_RULES } from '@shared/core-utils'
import { AbuseState, EmailPayload, UserAbuse } from '@shared/models'
import { SendEmailDefaultOptions } from '../../shared/models/server/emailer.model'
import { isTestInstance, root } from '../helpers/core-utils'
import { MAbuseFull, MAbuseMessage, MAccountDefault, MActorFollowActors, MActorFollowFull, MPlugin, MUser } from '../types/models'
import { MCommentOwnerVideo, MVideo, MVideoAccountLight } from '../types/models/video'
import { JobQueue } from './job-queue'
-
-const sanitizeHtml = require('sanitize-html')
-const markdownItEmoji = require('markdown-it-emoji/light')
-const MarkdownItClass = require('markdown-it')
-const markdownIt = new MarkdownItClass('default', { linkify: true, breaks: true, html: true })
-
-markdownIt.enable(TEXT_WITH_HTML_RULES)
-
-markdownIt.use(markdownItEmoji)
-
-const toSafeHtml = text => {
- // Restore line feed
- const textWithLineFeed = text.replace(/<br.?\/?>/g, '\r\n')
-
- // Convert possible markdown (emojis, emphasis and lists) to html
- const html = markdownIt.render(textWithLineFeed)
-
- // Convert to safe Html
- return sanitizeHtml(html, SANITIZE_OPTIONS)
-}
+import { toSafeHtml } from '../helpers/markdown'
const Email = require('email-templates')