UNPKG

@selfcommunity/utils

Version:

Utilities to integrate a Community.

114 lines (113 loc) 3.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.slugify = exports.copyTextToClipboard = exports.fallbackCopyTextToClipboard = exports.random = exports.stripHtml = exports.camelCase = exports.capitalize = exports.isString = void 0; /** * Check if v is a string * @param v */ function isString(v) { return typeof v === 'string' || v instanceof String; } exports.isString = isString; /** * Capitalize a string * @param str */ function capitalize(str) { let strVal = ''; let strArr = str.split(' '); for (let chr = 0; chr < strArr.length; chr++) { strVal += strArr[chr].substring(0, 1).toUpperCase() + strArr[chr].substring(1, strArr[chr].length); } return strVal; } exports.capitalize = capitalize; /** * CamelCase a string * @param str */ function camelCase(str) { // Lower cases the string return (str .toLowerCase() // Replaces any - or _ characters with a space .replace(/[-_]+/g, ' ') // Removes any non alphanumeric characters .replace(/[^\w\s]/g, '') // Uppercases the first character in each group immediately following a space // (delimited by spaces) .replace(/ (.)/g, ($1) => { return $1.toUpperCase(); }) // Removes spaces .replace(/ /g, '')); } exports.camelCase = camelCase; /** * Stripe html tags from a string * @param str */ function stripHtml(str) { return str.replace(/<[^>]*>?/gm, '').trim(); } exports.stripHtml = stripHtml; function random() { return (Math.random() + 1).toString(36).substring(7); } exports.random = random; /** * Fallback if navigator.clipboard doensn't exist * @param text * @returns {Promise<void>} */ function fallbackCopyTextToClipboard(text) { let textArea = document.createElement('textarea'); textArea.value = text; // Avoid scrolling to bottom textArea.style.top = '0'; textArea.style.left = '0'; textArea.style.position = 'fixed'; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { document.execCommand('copy'); document.body.removeChild(textArea); return Promise.resolve(); } catch (err) { document.body.removeChild(textArea); return Promise.reject(err); } } exports.fallbackCopyTextToClipboard = fallbackCopyTextToClipboard; /** * Copy text to clipboard * @param text * @returns {Promise<void>} * * Ex. * copyTextToClipboard(text).then( * function () { * console.log('Async: Copying to clipboard was successful!'); * }, * function (err) { * console.error('Async: Could not copy text: ', err); * }); */ function copyTextToClipboard(text) { if (!navigator.clipboard) { return fallbackCopyTextToClipboard(text); } return navigator.clipboard.writeText(text); } exports.copyTextToClipboard = copyTextToClipboard; function slugify(str) { return str .toLowerCase() .trim() .replace(/[^\w\s-]/g, '') .replace(/[\s_-]+/g, '-') .replace(/^-+|-+$/g, ''); } exports.slugify = slugify;