import express from 'express'
import { pathExists, readFile } from 'fs-extra'
+import { truncate } from 'lodash'
import { join } from 'path'
import validator from 'validator'
import { isTestOrDevInstance } from '@server/helpers/core-utils'
escapedSiteName: string
escapedTitle: string
- escapedDescription: string
+ escapedTruncatedDescription: string
url: string
originUrl: string
res.status(HttpStatusCode.NOT_FOUND_404)
return html
}
- const description = mdToOneLinePlainText(video.description)
+ const escapedTruncatedDescription = buildEscapedTruncatedDescription(video.description)
let customHtml = ClientHtml.addTitleTag(html, video.name)
- customHtml = ClientHtml.addDescriptionTag(customHtml, description)
+ customHtml = ClientHtml.addDescriptionTag(customHtml, escapedTruncatedDescription)
const url = WEBSERVER.URL + video.getWatchStaticPath()
const originUrl = video.url
originUrl,
escapedSiteName: escapeHTML(siteName),
escapedTitle: escapeHTML(title),
- escapedDescription: escapeHTML(description),
+ escapedTruncatedDescription,
disallowIndexation: video.privacy !== VideoPrivacy.PUBLIC,
image,
embed,
return html
}
- const description = mdToOneLinePlainText(videoPlaylist.description)
+ const escapedTruncatedDescription = buildEscapedTruncatedDescription(videoPlaylist.description)
let customHtml = ClientHtml.addTitleTag(html, videoPlaylist.name)
- customHtml = ClientHtml.addDescriptionTag(customHtml, description)
+ customHtml = ClientHtml.addDescriptionTag(customHtml, escapedTruncatedDescription)
const url = WEBSERVER.URL + videoPlaylist.getWatchStaticPath()
const originUrl = videoPlaylist.url
originUrl,
escapedSiteName: escapeHTML(siteName),
escapedTitle: escapeHTML(title),
- escapedDescription: escapeHTML(description),
+ escapedTruncatedDescription,
disallowIndexation: videoPlaylist.privacy !== VideoPlaylistPrivacy.PUBLIC,
embed,
image,
return ClientHtml.getIndexHTML(req, res)
}
- const description = mdToOneLinePlainText(entity.description)
+ const escapedTruncatedDescription = buildEscapedTruncatedDescription(entity.description)
let customHtml = ClientHtml.addTitleTag(html, entity.getDisplayName())
- customHtml = ClientHtml.addDescriptionTag(customHtml, description)
+ customHtml = ClientHtml.addDescriptionTag(customHtml, escapedTruncatedDescription)
const url = entity.getClientUrl()
const originUrl = entity.Actor.url
originUrl,
escapedTitle: escapeHTML(title),
escapedSiteName: escapeHTML(siteName),
- escapedDescription: escapeHTML(description),
+ escapedTruncatedDescription,
image,
ogType,
twitterCard,
return htmlStringPage.replace(CUSTOM_HTML_TAG_COMMENTS.TITLE, titleTag)
}
- private static addDescriptionTag (htmlStringPage: string, description?: string) {
- const content = description || CONFIG.INSTANCE.SHORT_DESCRIPTION
- const descriptionTag = `<meta name="description" content="${escapeHTML(content)}" />`
+ private static addDescriptionTag (htmlStringPage: string, escapedTruncatedDescription?: string) {
+ const content = escapedTruncatedDescription || escapeHTML(CONFIG.INSTANCE.SHORT_DESCRIPTION)
+ const descriptionTag = `<meta name="description" content="${content}" />`
return htmlStringPage.replace(CUSTOM_HTML_TAG_COMMENTS.DESCRIPTION, descriptionTag)
}
}
metaTags['og:url'] = tags.url
- metaTags['og:description'] = tags.escapedDescription
+ metaTags['og:description'] = tags.escapedTruncatedDescription
if (tags.embed) {
metaTags['og:video:url'] = tags.embed.url
private static generateStandardMetaTags (tags: Tags) {
return {
name: tags.escapedTitle,
- description: tags.escapedDescription,
+ description: tags.escapedTruncatedDescription,
image: tags.image.url
}
}
'twitter:card': tags.twitterCard,
'twitter:site': CONFIG.SERVICES.TWITTER.USERNAME,
'twitter:title': tags.escapedTitle,
- 'twitter:description': tags.escapedDescription,
+ 'twitter:description': tags.escapedTruncatedDescription,
'twitter:image': tags.image.url
}
'@context': 'http://schema.org',
'@type': tags.schemaType,
'name': tags.escapedTitle,
- 'description': tags.escapedDescription,
+ 'description': tags.escapedTruncatedDescription,
'image': tags.image.url,
'url': tags.url
}
return sendHTML(html, res, true)
}
+
+function buildEscapedTruncatedDescription (description: string) {
+ return truncate(mdToOneLinePlainText(description), { length: 200 })
+}