UNPKG

@chayns-components/emoji-input

Version:
57 lines (55 loc) 2.53 kB
"use strict"; 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