JSFiddle - React, Tailwind, and code Playground

HTML

<textarea id="input"></textarea>
<label>to html
    <input type="radio" name="type" class="type" value="to" />
</label>
<label>from html
    <input type="radio" name="type" class="type" value="from" checked />
</label>
<input type="button" value="process" id="process" />

JavaScript

if (typeof escapeHtmlEntities == 'undefined') {
    escapeHtmlEntities = function (text) {
        return text.replace(/[\u00A0-\u2666<>\&]/g, function (c) {
            return '&' + (escapeHtmlEntities.entityTable[c.charCodeAt(0)] || '#' + c.charCodeAt(0)) + ';';
        });
    };

    // all HTML4 entities as defined here: http://www.w3.org/TR/html4/sgml/entities.html
    // added: amp, lt, gt, quot and apos

    var escapeHtmlEntities = {},
    type = $("input[name=type]:checked").val();

    if (type === "from") {

        escapeHtmlEntities.entityTable = {
            34: 'quot',
            38: 'amp',
            39: 'apos',
            60: 'lt',
            62: 'gt',
            160: 'nbsp',
            161: 'iexcl',
            162: 'cent',
            163: 'pound',
            164: 'curren',
            165: 'yen',
            166: 'brvbar',
            167: 'sect',
            168: 'uml',
            169: 'copy',
            170: 'ordf',
            171: 'laquo',
            172: 'not',
            173: 'shy',
            174: 'reg',
            175: 'macr',
            176: 'deg',
            177: 'plusmn',
            178: 'sup2',
            179: 'sup3',
            180: 'acute',
            181: 'micro',
            182: 'para',
            183: 'middot',
            184: 'cedil',
            185: 'sup1',
            186: 'ordm',
            187: 'raquo',
            188: 'frac14',
            189: 'frac12',
            190: 'frac34',
            191: 'iquest',
            192: 'Agrave',
            193: 'Aacute',
            194: 'Acirc',
            195: 'Atilde',
            196: 'Auml',
            197: 'Aring',
            198: 'AElig',
            199: 'Ccedil',
            200: 'Egrave',
            201: 'Eacute',
            202: 'Ecirc',
            203: 'Euml',
            204: 'Igrave',
            205: 'Iacute',
            206: 'Icirc',
            207: 'Iuml',
            208: 'ETH',
            209: 'Ntilde',
            210:...