From 2e5299e521976d902ea38df8e55342dffb7e04a0 Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Sat, 4 Jun 2022 02:13:00 +0200 Subject: [PATCH] Improving MOTD --- app/frontend/static/assets/js/motd.js | 83 ++++++++++----------------- 1 file changed, 30 insertions(+), 53 deletions(-) diff --git a/app/frontend/static/assets/js/motd.js b/app/frontend/static/assets/js/motd.js index e90c5ebf..d58b2288 100644 --- a/app/frontend/static/assets/js/motd.js +++ b/app/frontend/static/assets/js/motd.js @@ -22,19 +22,17 @@ var styleMap = { '§o': 'font-style:italic', }; function obfuscate(string, elem) { - var magicSpan, - currNode; - if(string.indexOf('
') > -1) { + var magicSpan; + if (string.indexOf('
') > -1) { elem.innerHTML = string; - for(var j = 0, len = elem.childNodes.length; j < len; j++) { - currNode = elem.childNodes[j]; - if(currNode.nodeType === 3) { + 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); } @@ -42,75 +40,54 @@ function obfuscate(string, elem) { var i = 0, obsStr = str || el.innerHTML, len = obsStr.length; - obfuscators.push( window.setInterval(function () { - if(i >= len) i = 0; + obfuscators.push(window.setInterval(function () { + if (i >= len) i = 0; obsStr = replaceRand(obsStr, i); el.innerHTML = obsStr; i++; - }, 0) ); + }, 0)); } function randInt(min, max) { - return Math.floor( Math.random() * (max - min + 1) ) + min; - } + return Math.floor(Math.random() * (max - min + 1)) + min; + } function replaceRand(string, i) { - var randChar = String.fromCharCode( randInt(64, 95) ); + 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; - string = string.replace(/\x00*/g, ''); - for(var i = 0, len = codes.length; i < len; i++) { - elem.style.cssText += styleMap[codes[i]] + ';'; - if(codes[i] === '§k') { + codes.forEach(code => { + elem.style.cssText += styleMap[code] + ';'; + if (code === '§k') { obfuscate(string, elem); obfuscated = true; } - } - if(!obfuscated) elem.innerHTML = string; + }); + if (!obfuscated) elem.innerHTML = string; return elem; } function parseStyle(string) { - var codes = string.match(/§.{1}/g) || [], - indexes = [], - apply = [], - tmpStr, - deltaIndex, - noCode, - final = document.createDocumentFragment(), - i; + var final = document.createDocumentFragment(); + console.log("STRING : " + string) string = string.replace(/\n|\\n/g, '
'); - for(i = 0, len = codes.length; i < len; i++) { - indexes.push( string.indexOf(codes[i]) ); - string = string.replace(codes[i], '\x00\x00'); - } - if(indexes[0] !== 0) { - final.appendChild( applyCode( string.substring(0, indexes[0]), [] ) ); - } - for(i = 0; i < len; i++) { - indexDelta = indexes[i + 1] - indexes[i]; - if(indexDelta === 2) { - while(indexDelta === 2) { - apply.push ( codes[i] ); - i++; - indexDelta = indexes[i + 1] - indexes[i]; - } - apply.push ( codes[i] ); - } else { - apply.push( codes[i] ); + 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)); } - if( apply.lastIndexOf('§r') > -1) { - apply = apply.slice( apply.lastIndexOf('§r') + 1 ); - } - tmpStr = string.substring( indexes[i], indexes[i + 1] ); - final.appendChild( applyCode(tmpStr, apply) ); - } + }); return final; } function clearObfuscators() { var i = obfuscators.length; - for(;i--;) { + for (; i--;) { clearInterval(obfuscators[i]); } obfuscators = []; @@ -120,7 +97,7 @@ function initParser(input, output) { var input = document.getElementById(input), output = document.getElementById(output); if (input != null && output != null) { - var parsed = parseStyle( input.innerHTML ); + var parsed = parseStyle(input.innerHTML); output.innerHTML = ''; output.appendChild(parsed); }