tc-ui-toolkit
Version:
React components used to develop tools for the desktop app translationCore
84 lines (65 loc) • 7.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.generateSelection = exports.normalizeString = exports.occurrencesInString = void 0;
/* eslint-disable no-console */
/**
* @description Function that count occurrences of a substring in a string
* @param {String} string - The string to search in
* @param {String} subString - The sub string to search for
* @returns {Integer} - the count of the occurrences
* @see http://stackoverflow.com/questions/4009756/how-to-count-string-occurrence-in-string/7924240#7924240
* modified to fit our use cases, return zero for '' substring, and no use case for overlapping.
*/
var occurrencesInString = function occurrencesInString(string, subString) {
if (subString.length <= 0) {
return 0;
}
var occurrences = 0,
position = 0,
step = subString.length;
while (position < string.length) {
position = string.indexOf(subString, position);
if (position === -1) {
break;
}
++occurrences;
position += step;
}
return occurrences;
};
/**
* @description - Function that normalizes a string including whitespace
* @param {String} string - the string to normalize
* @preturns {String} - The returned normalized string
*/
exports.occurrencesInString = occurrencesInString;
var normalizeString = function normalizeString(string) {
string = string.replace(/\s+/g, ' ');
return string;
};
/**
* @description - generates a selection object from the selected text, precedingText and whole text
* @param {String} selectedText - the text that is selected
* @param {String} precedingText - the text that precedes the selection
* @param {String} entireText - the text that the selection should be in
* @return {Object} - the selection object to be used
*/
exports.normalizeString = normalizeString;
var generateSelection = function generateSelection(selectedText, precedingText, entireText) {
var selection = {}; // response
// replace more than one contiguous space with a single one since HTML/selection only renders 1
entireText = normalizeString(entireText); // get the occurrences before this one
var precedingOccurrences = occurrencesInString(precedingText, selectedText); // calculate this occurrence number by adding it to the preceding ones
var occurrence = precedingOccurrences + 1; // get the total occurrences from the verse
var occurrences = occurrencesInString(entireText, selectedText);
selection = {
text: selectedText,
occurrence: occurrence,
occurrences: occurrences
};
return selection;
};
exports.generateSelection = generateSelection;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9WZXJzZUNoZWNrL2hlbHBlcnMvc3RyaW5nSGVscGVycy5qcyJdLCJuYW1lcyI6WyJvY2N1cnJlbmNlc0luU3RyaW5nIiwic3RyaW5nIiwic3ViU3RyaW5nIiwibGVuZ3RoIiwib2NjdXJyZW5jZXMiLCJwb3NpdGlvbiIsInN0ZXAiLCJpbmRleE9mIiwibm9ybWFsaXplU3RyaW5nIiwicmVwbGFjZSIsImdlbmVyYXRlU2VsZWN0aW9uIiwic2VsZWN0ZWRUZXh0IiwicHJlY2VkaW5nVGV4dCIsImVudGlyZVRleHQiLCJzZWxlY3Rpb24iLCJwcmVjZWRpbmdPY2N1cnJlbmNlcyIsIm9jY3VycmVuY2UiLCJ0ZXh0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7Ozs7Ozs7O0FBUU8sSUFBTUEsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFDQyxNQUFELEVBQVNDLFNBQVQsRUFBdUI7QUFDeEQsTUFBSUEsU0FBUyxDQUFDQyxNQUFWLElBQW9CLENBQXhCLEVBQTJCO0FBQ3pCLFdBQU8sQ0FBUDtBQUNEOztBQUVELE1BQUlDLFdBQVcsR0FBRyxDQUFsQjtBQUFBLE1BQXFCQyxRQUFRLEdBQUcsQ0FBaEM7QUFBQSxNQUFtQ0MsSUFBSSxHQUFHSixTQUFTLENBQUNDLE1BQXBEOztBQUVBLFNBQU9FLFFBQVEsR0FBR0osTUFBTSxDQUFDRSxNQUF6QixFQUFpQztBQUMvQkUsSUFBQUEsUUFBUSxHQUFHSixNQUFNLENBQUNNLE9BQVAsQ0FBZUwsU0FBZixFQUEwQkcsUUFBMUIsQ0FBWDs7QUFFQSxRQUFJQSxRQUFRLEtBQUssQ0FBQyxDQUFsQixFQUFxQjtBQUNuQjtBQUNEOztBQUNELE1BQUVELFdBQUY7QUFDQUMsSUFBQUEsUUFBUSxJQUFJQyxJQUFaO0FBQ0Q7O0FBQ0QsU0FBT0YsV0FBUDtBQUNELENBakJNO0FBa0JQOzs7Ozs7Ozs7QUFLTyxJQUFNSSxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUNQLE1BQUQsRUFBWTtBQUN6Q0EsRUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNRLE9BQVAsQ0FBZSxNQUFmLEVBQXVCLEdBQXZCLENBQVQ7QUFDQSxTQUFPUixNQUFQO0FBQ0QsQ0FITTtBQUlQOzs7Ozs7Ozs7OztBQU9PLElBQU1TLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FBQ0MsWUFBRCxFQUFlQyxhQUFmLEVBQThCQyxVQUE5QixFQUE2QztBQUM1RSxNQUFJQyxTQUFTLEdBQUcsRUFBaEIsQ0FENEUsQ0FDeEQ7QUFDcEI7O0FBQ0FELEVBQUFBLFVBQVUsR0FBR0wsZUFBZSxDQUFDSyxVQUFELENBQTVCLENBSDRFLENBSTVFOztBQUNBLE1BQUlFLG9CQUFvQixHQUFHZixtQkFBbUIsQ0FBQ1ksYUFBRCxFQUFnQkQsWUFBaEIsQ0FBOUMsQ0FMNEUsQ0FNNUU7O0FBQ0EsTUFBSUssVUFBVSxHQUFHRCxvQkFBb0IsR0FBRyxDQUF4QyxDQVA0RSxDQVE1RTs7QUFDQSxNQUFJWCxXQUFXLEdBQUdKLG1CQUFtQixDQUFDYSxVQUFELEVBQWFGLFlBQWIsQ0FBckM7QUFFQUcsRUFBQUEsU0FBUyxHQUFHO0FBQ1ZHLElBQUFBLElBQUksRUFBRU4sWUFESTtBQUVWSyxJQUFBQSxVQUFVLEVBQUVBLFVBRkY7QUFHVlosSUFBQUEsV0FBVyxFQUFFQTtBQUhILEdBQVo7QUFLQSxTQUFPVSxTQUFQO0FBQ0QsQ0FqQk0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0aGF0IGNvdW50IG9jY3VycmVuY2VzIG9mIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIC0gVGhlIHN0cmluZyB0byBzZWFyY2ggaW5cbiAqIEBwYXJhbSB7U3RyaW5nfSBzdWJTdHJpbmcgLSBUaGUgc3ViIHN0cmluZyB0byBzZWFyY2ggZm9yXG4gKiBAcmV0dXJucyB7SW50ZWdlcn0gLSB0aGUgY291bnQgb2YgdGhlIG9jY3VycmVuY2VzXG4gKiBAc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDAwOTc1Ni9ob3ctdG8tY291bnQtc3RyaW5nLW9jY3VycmVuY2UtaW4tc3RyaW5nLzc5MjQyNDAjNzkyNDI0MFxuICogbW9kaWZpZWQgdG8gZml0IG91ciB1c2UgY2FzZXMsIHJldHVybiB6ZXJvIGZvciAnJyBzdWJzdHJpbmcsIGFuZCBubyB1c2UgY2FzZSBmb3Igb3ZlcmxhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBvY2N1cnJlbmNlc0luU3RyaW5nID0gKHN0cmluZywgc3ViU3RyaW5nKSA9PiB7XG4gIGlmIChzdWJTdHJpbmcubGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBvY2N1cnJlbmNlcyA9IDAsIHBvc2l0aW9uID0gMCwgc3RlcCA9IHN1YlN0cmluZy5sZW5ndGg7XG5cbiAgd2hpbGUgKHBvc2l0aW9uIDwgc3RyaW5nLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyaW5nLmluZGV4T2Yoc3ViU3RyaW5nLCBwb3NpdGlvbik7XG5cbiAgICBpZiAocG9zaXRpb24gPT09IC0xKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytvY2N1cnJlbmNlcztcbiAgICBwb3NpdGlvbiArPSBzdGVwO1xuICB9XG4gIHJldHVybiBvY2N1cnJlbmNlcztcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiAtIEZ1bmN0aW9uIHRoYXQgbm9ybWFsaXplcyBhIHN0cmluZyBpbmNsdWRpbmcgd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyAtIHRoZSBzdHJpbmcgdG8gbm9ybWFsaXplXG4gKiBAcHJldHVybnMge1N0cmluZ30gLSBUaGUgcmV0dXJuZWQgbm9ybWFsaXplZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVN0cmluZyA9IChzdHJpbmcpID0+IHtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiAtIGdlbmVyYXRlcyBhIHNlbGVjdGlvbiBvYmplY3QgZnJvbSB0aGUgc2VsZWN0ZWQgdGV4dCwgcHJlY2VkaW5nVGV4dCBhbmQgd2hvbGUgdGV4dFxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdGVkVGV4dCAtIHRoZSB0ZXh0IHRoYXQgaXMgc2VsZWN0ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcmVjZWRpbmdUZXh0IC0gdGhlIHRleHQgdGhhdCBwcmVjZWRlcyB0aGUgc2VsZWN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gZW50aXJlVGV4dCAtIHRoZSB0ZXh0IHRoYXQgdGhlIHNlbGVjdGlvbiBzaG91bGQgYmUgaW5cbiAqIEByZXR1cm4ge09iamVjdH0gLSB0aGUgc2VsZWN0aW9uIG9iamVjdCB0byBiZSB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNlbGVjdGlvbiA9IChzZWxlY3RlZFRleHQsIHByZWNlZGluZ1RleHQsIGVudGlyZVRleHQpID0+IHtcbiAgbGV0IHNlbGVjdGlvbiA9IHt9OyAvLyByZXNwb25zZVxuICAvLyByZXBsYWNlIG1vcmUgdGhhbiBvbmUgY29udGlndW91cyBzcGFjZSB3aXRoIGEgc2luZ2xlIG9uZSBzaW5jZSBIVE1ML3NlbGVjdGlvbiBvbmx5IHJlbmRlcnMgMVxuICBlbnRpcmVUZXh0ID0gbm9ybWFsaXplU3RyaW5nKGVudGlyZVRleHQpO1xuICAvLyBnZXQgdGhlIG9jY3VycmVuY2VzIGJlZm9yZSB0aGlzIG9uZVxuICBsZXQgcHJlY2VkaW5nT2NjdXJyZW5jZXMgPSBvY2N1cnJlbmNlc0luU3RyaW5nKHByZWNlZGluZ1RleHQsIHNlbGVjdGVkVGV4dCk7XG4gIC8vIGNhbGN1bGF0ZSB0aGlzIG9jY3VycmVuY2UgbnVtYmVyIGJ5IGFkZGluZyBpdCB0byB0aGUgcHJlY2VkaW5nIG9uZXNcbiAgbGV0IG9jY3VycmVuY2UgPSBwcmVjZWRpbmdPY2N1cnJlbmNlcyArIDE7XG4gIC8vIGdldCB0aGUgdG90YWwgb2NjdXJyZW5jZXMgZnJvbSB0aGUgdmVyc2VcbiAgbGV0IG9jY3VycmVuY2VzID0gb2NjdXJyZW5jZXNJblN0cmluZyhlbnRpcmVUZXh0LCBzZWxlY3RlZFRleHQpO1xuXG4gIHNlbGVjdGlvbiA9IHtcbiAgICB0ZXh0OiBzZWxlY3RlZFRleHQsXG4gICAgb2NjdXJyZW5jZTogb2NjdXJyZW5jZSxcbiAgICBvY2N1cnJlbmNlczogb2NjdXJyZW5jZXMsXG4gIH07XG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuIl19