/** * Truncate a string to the given length, appending ellipses if necessary. * * @param {String} string * @param {Number} length * @param {Number} [start=0] * @return {String} */ export function truncate(string, length, start = 0) { return (start > 0 ? '...' : '') + string.substring(start, start + length) + (string.length > start + length ? '...' : ''); } /** * Create a slug out of the given string. Non-alphanumeric characters are * converted to hyphens. * * NOTE: This method does not use the comparably sophisticated transliteration * mechanism that is employed in the backend. Therefore, it should only be used * to *suggest* slugs that can be overridden by the user. * * @param {String} string * @return {String} */ export function slug(string) { return string .toLowerCase() .replace(/[^a-z0-9]/gi, '-') .replace(/-+/g, '-') .replace(/-$|^-/g, ''); } /** * Strip HTML tags and quotes out of the given string, replacing them with * meaningful punctuation. * * @param {String} string * @return {String} */ export function getPlainContent(string) { const html = string.replace(/(<\/p>|
)/g, '$1  ').replace(/]*>/gi, ' '); const dom = $('
').html(html); dom.find(getPlainContent.removeSelectors.join(',')).remove(); return dom.text().replace(/\s+/g, ' ').trim(); } /** * An array of DOM selectors to remove when getting plain content. * * @type {Array} */ getPlainContent.removeSelectors = ['blockquote', 'script']; /** * Make a string's first character uppercase. * * @param {String} string * @return {String} */ export function ucfirst(string) { return string.substr(0, 1).toUpperCase() + string.substr(1); }