UNPKG

@bigfishtv/cockpit

Version:

171 lines (148 loc) 5 kB
'use strict'; exports.__esModule = true; exports.stringContains = stringContains; exports.capitalizeFirstLetter = capitalizeFirstLetter; exports.escapeRegexCharacters = escapeRegexCharacters; exports.titleCase = titleCase; exports.underscoreCase = underscoreCase; exports.stripHtml = stripHtml; exports.wordCount = wordCount; exports.labelFromKeyPath = labelFromKeyPath; exports.simplifyNonBreakingSpaces = simplifyNonBreakingSpaces; var _titleCase = require('./titleCase'); var _titleCase2 = _interopRequireDefault(_titleCase); var _typeUtils = require('./typeUtils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Searches for string in another string, breaks search string up by delimiter. Used for keywordsearching * @param {String} string - string to search * @param {Array} search - query string * @param {Boolean} caseSensitive * @param {RegExp} delimiter * @return {Boolean} */ /** * String Utilities * @module Utilities/stringUtils */ function stringContains(string) { var search = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var caseSensitive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var delimiter = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : /[\s,]+/; if (typeof string != 'string') return string; if (!caseSensitive) { search = typeof search == 'string' ? search.toLowerCase() : search.map(function (term) { return term.toLowerCase(); }); string = string.toLowerCase(); } var terms = (typeof search == 'string' ? [search] : search.split(delimiter)).filter(function (item, pos, self) { return self.indexOf(item) == pos; }); for (var _iterator = terms, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var term = _ref; if (string.indexOf(term) > -1) return true; } return false; } /** * Capitalizes first letter of string * @param {String} string * @return {String} */ function capitalizeFirstLetter(string) { if (typeof string != 'string') return string; return string.charAt(0).toUpperCase() + string.slice(1); } /** * Escapes regex characters in string * @param {String} string * @return {String} */ function escapeRegexCharacters(string) { if (typeof string != 'string') return string; return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } /** * Converts string To Title Case * @param {String} string * @return {String} */ function titleCase(string) { if (typeof string != 'string') return string; var cleanString = string.replace(/([_\-])/g, ' '); return (0, _titleCase2.default)(cleanString); } /** * Converts camelCase or PascalCase to underscore_case * Adapted from https://stackoverflow.com/questions/30521224/javascript-convert-pascalcase-to-underscore-case * @param {String} string * @return {String} */ function underscoreCase(string) { return string.replace(/\.?([A-Z]+)/g, function (x, y) { return '_' + y.toLowerCase(); }).replace(/^_/, ''); } /** * Strips html tags from string * @param {String} string * @return {String} */ function stripHtml(string) { var div = document.createElement('div'); div.innerHTML = string.replace(/<br ?\/?>/g, ' '); return div.textContent || div.innerText || string; } /** * Returns word count * @param {String} value * @return {Number} */ function wordCount(value) { var words = String(value == null ? '' : value).replace(/\//g, ' ') // convert forward-slashes to spaces .replace(/[^A-Z\s]/gi, '') // remove all non-word characters .replace(/^\s+/, '') // trim start .replace(/\s+$/, '') // trim end .split(/\s+/); // split on the spaces return words[0].length ? words.length : 0; } /** * Returns titlized label from a path description * @param {String|Array} keyPath * @return {String} */ function labelFromKeyPath(keyPath) { var label = ((0, _typeUtils.isArray)(keyPath) ? keyPath.filter(function (value) { return !(0, _typeUtils.isNumeric)(value); }).pop() : keyPath) || ''; label = label.split('.').pop(); return titleCase(label.replace('_', ' ')); } /** * Replaces unnecessary &nbsp; tags with normal spaces in html strings. * * @param {String} html * @return {String} */ function simplifyNonBreakingSpaces(html) { return html.replace(/&nbsp;/gi, function (match, offset, string) { var before = string.substr(0, offset); // don't change if previous string is a &nbsp; if (before.match(/&nbsp;$/)) return match; var after = string.substr(offset + match.length); // don't replace &nbsp; before closing html tag if (after.match(/^<\//)) return match; // return a normal space in all other cases return ' '; }); }