@chayns-components/emoji-input
Version:
Input field that supports HTML elements and emojis
57 lines (55 loc) • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getElementTextLength = exports.convertTextToHTML = exports.convertHTMLToText = void 0;
var _regex = require("../constants/regex");
var _emoji = require("./emoji");
const convertTextToHTML = text => {
const element = document.createElement('div');
element.style.position = 'absolute';
element.style.opacity = '0';
element.contentEditable = 'true';
element.innerText = text;
document.body.appendChild(element);
let result = element.innerHTML;
document.body.removeChild(element);
result = (0, _emoji.unescapeHTML)(result);
result = result.replace(_regex.HTML_A_TAG_REGEX, '$1').replace(_regex.BB_LC_MENTION_REGEX, '<lc_mention contenteditable="false" id="$1"><span>@</span>$2</lc_mention>').replace(_regex.BB_NER_IGNORE_REGEX, '<nerIgnore contenteditable="false">$1</nerIgnore>').replace(_regex.BB_NER_REPLACE_REGEX, (_, prefix, type, value, entity) => {
const prefixAttr = prefix ? `prefix="${prefix}" ` : '';
return `<nerReplace contenteditable="false" ${prefixAttr}type="${type}" value="${value}">${entity}</nerReplace>`;
});
return result;
};
exports.convertTextToHTML = convertTextToHTML;
const convertHTMLToText = text => {
let result = text;
result = result.replace(_regex.HTML_A_TAG_REGEX, '$1').replace(_regex.HTML_BOLD_REGEX, '[b]$1[/b]').replace(_regex.HTML_LC_MENTION_REGEX, '[lc_mention id="$1"]$2[/lc_mention]').replace(_regex.HTML_NER_IGNORE_REGEX, '[nerIgnore]$1[/nerIgnore]').replace(_regex.HTML_NER_REPLACE_REGEX, (_, prefix, type, value, entity) => {
const prefixAttr = prefix ? `prefix="${prefix}" ` : '';
return `[nerReplace ${prefixAttr}type="${type}" value="${value}"]${entity}[/nerReplace]`;
});
// eslint-disable-next-line no-irregular-whitespace
result = result.replace(//g, '');
result = (0, _emoji.escapeHTML)(result);
const element = document.createElement('div');
element.style.position = 'absolute';
element.style.opacity = '0';
element.contentEditable = 'true';
element.innerHTML = result;
document.body.appendChild(element);
result = element.innerText;
document.body.removeChild(element);
return result;
};
exports.convertHTMLToText = convertHTMLToText;
const getElementTextLength = element => {
let textLength = 0;
try {
textLength = convertHTMLToText(element.outerHTML).length;
} catch (e) {
// Do nothing
}
return textLength;
};
exports.getElementTextLength = getElementTextLength;
//# sourceMappingURL=text.js.map