UNPKG

highlight-text

Version:

Highlight text case and accent insensitive

51 lines (38 loc) 1.69 kB
'use strict'; exports.__esModule = true; exports['default'] = highlightText; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _lodashEscape = require('lodash.escape'); var _lodashEscape2 = _interopRequireDefault(_lodashEscape); var _mergeRanges = require('merge-ranges'); var _mergeRanges2 = _interopRequireDefault(_mergeRanges); var _diacritics = require('diacritics'); function allIndexesOf(str, word) { var indexes = []; for (var idx = str.indexOf(word); idx !== -1; idx = str.indexOf(word, idx + 1)) { indexes.push(idx); } return indexes; } function highlightText(text, highlight) { var tag = arguments.length <= 2 || arguments[2] === undefined ? 'b' : arguments[2]; var escapedText = _lodashEscape2['default'](text); var normalizedText = _diacritics.remove(escapedText).toLowerCase(); var highlightIntervals = _lodashEscape2['default'](highlight).split(/(\s+)/).map(function (word) { return word.trim(); }).filter(function (word) { return word; }).reduce(function (intervals, word) { var normalizedWord = _diacritics.remove(word).toLowerCase(); var wordIntervals = allIndexesOf(normalizedText, normalizedWord).map(function (idx) { return [idx, idx + normalizedWord.length]; }); return intervals.concat(wordIntervals); }, []); return _mergeRanges2['default'](highlightIntervals).reduceRight(function (reducedText, _ref) { var start = _ref[0]; var end = _ref[1]; return reducedText.slice(0, start) + ('<' + tag + '>') + reducedText.slice(start, end) + ('</' + tag + '>') + reducedText.slice(end); }, escapedText); } module.exports = exports['default'];