var obfuscators = []; var styleMap = { '§0': 'color:#000000', '§1': 'color:#0000AA', '§2': 'color:#00AA00', '§3': 'color:#00AAAA', '§4': 'color:#AA0000', '§5': 'color:#AA00AA', '§6': 'color:#FFAA00', '§7': 'color:#AAAAAA', '§8': 'color:#555555', '§9': 'color:#5555FF', '§a': 'color:#55FF55', '§b': 'color:#55FFFF', '§c': 'color:#FF5555', '§d': 'color:#FF55FF', '§e': 'color:#FFFF55', '§f': 'color:#FFFFFF', '§l': 'font-weight:bold', '§m': 'text-decoration:line-through', '§n': 'text-decoration:underline', '§o': 'font-style:italic', }; function obfuscate(string, elem) { var magicSpan; if (string.indexOf('
') > -1) { elem.innerHTML = string; elem.childNodes.array.forEach(currNode => { if (currNode.nodeType === 3) { magicSpan = document.createElement('span'); magicSpan.innerHTML = currNode.nodeValue; elem.replaceChild(magicSpan, currNode); init(magicSpan); } }); } else { init(elem, string); } function init(el, str) { var i = 0, obsStr = str || el.innerHTML, len = obsStr.length; obfuscators.push(window.setInterval(function () { if (i >= len) i = 0; obsStr = replaceRand(obsStr, i); el.innerHTML = obsStr; i++; }, 0)); } function randInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function replaceRand(string, i) { var randChar = String.fromCharCode(randInt(64, 95)); return string.substr(0, i) + randChar + string.substr(i + 1, string.length); } } function applyCode(string, codes) { var elem = document.createElement('span'), obfuscated = false; codes.forEach(code => { elem.style.cssText += styleMap[code] + ';'; if (code === '§k') { obfuscate(string, elem); obfuscated = true; } }); if (!obfuscated) elem.innerHTML = string; return elem; } function parseStyle(string) { var final = document.createDocumentFragment(); console.log("STRING : " + string) string = string.replace(/\n|\\n/g, '
'); string = string.split('§r'); string.forEach(item => { var apply = []; if (item.length > 0) { apply = item.match(/§.{1}/g) || []; apply.forEach(code => { item = item.replace(code, '') }); final.appendChild(applyCode(item, apply)); } }); return final; } function clearObfuscators() { obfuscators.slice().reverse().forEach(item => { clearInterval(item); }); obfuscators = []; } function initParser(input, output) { clearObfuscators(); var input = document.getElementById(input), output = document.getElementById(output); if (input != null && output != null) { var parsed = parseStyle(input.innerHTML); output.innerHTML = ''; output.appendChild(parsed); } }