From c73e83da283c6d4eb094e384d59c4f8eb221507d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 28 Mar 2018 11:00:02 +0200 Subject: Truncate correctly video descriptions --- server/helpers/core-utils.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'server/helpers/core-utils.ts') diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts index 65f18d644..a3dfe27b5 100644 --- a/server/helpers/core-utils.ts +++ b/server/helpers/core-utils.ts @@ -12,6 +12,7 @@ import { isAbsolute, join } from 'path' import * as pem from 'pem' import * as rimraf from 'rimraf' import { URL } from 'url' +import { truncate } from 'lodash' function sanitizeUrl (url: string) { const urlObject = new URL(url) @@ -78,6 +79,22 @@ function buildPath (path: string) { return join(root(), path) } +// Consistent with .length, lodash truncate function is not +function peertubeTruncate (str: string, maxLength: number) { + const options = { + length: maxLength + } + const truncatedStr = truncate(str, options) + + // The truncated string is okay, we can return it + if (truncatedStr.length <= maxLength) return truncatedStr + + // Lodash takes into account all UTF characters, whereas String.prototype.length does not: some characters have a length of 2 + // We always use the .length so we need to truncate more if needed + options.length -= truncatedStr.length - maxLength + return truncate(str, options) +} + function promisify0 (func: (cb: (err: any, result: A) => void) => void): () => Promise { return function promisified (): Promise { return new Promise((resolve: (arg: A) => void, reject: (err: any) => void) => { @@ -145,6 +162,7 @@ export { sanitizeUrl, sanitizeHost, buildPath, + peertubeTruncate, promisify0, promisify1, -- cgit v1.2.3