@bigfishtv/cockpit
Version:
171 lines (148 loc) • 5 kB
JavaScript
;
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 tags with normal spaces in html strings.
*
* @param {String} html
* @return {String}
*/
function simplifyNonBreakingSpaces(html) {
return html.replace(/ /gi, function (match, offset, string) {
var before = string.substr(0, offset);
// don't change if previous string is a
if (before.match(/ $/)) return match;
var after = string.substr(offset + match.length);
// don't replace before closing html tag
if (after.match(/^<\//)) return match;
// return a normal space in all other cases
return ' ';
});
}