JSFiddle - React, Tailwind, and code Playground

by scurrilus

HTML

<div class="article__body">
  <div class="obfuscated">
      Sdrs
  </div>
  <div class="obfuscated">
      Ein anderer Test.
  </div>
</div>

CSS

.deobfuscated {
  background: green;
}

.obfuscated {
  background: red;
}

JavaScript

function DeobfuscateText(rootNode) {
    this.rootNode = rootNode;
    this.init();
}

DeobfuscateText.prototype.init = function () {
    const that = this;

    Array.from(document.getElementsByClassName('obfuscated')).forEach((elem) => {
        try {
            that.replaceTextContent(elem);
            if (elem.classList.contains('obfuscated')) {
                elem.classList.remove('obfuscated');
                elem.classList.add('deobfuscated');
            } else {
                elem.classList.add('deobfuscated');
            }
        } catch (e) {
            console.log(e);
        }
    });
};

DeobfuscateText.prototype.replaceTextContent = (elem) => {
    if ((elem.className).replace(/[\n\t]/g, '').indexOf('obfuscated') > -1) {
        const obfuscatedText = elem.textContent;
        let deobfuscatedText = '';

        for (let i = 0; i < obfuscatedText.length; i++) {
            const charValue = obfuscatedText.charCodeAt(i);
            if (charValue === 177) {
                deobfuscatedText += '%';
            } else if (charValue === 178) {
                deobfuscatedText += '!';
            } else if (charValue === 180) {
                deobfuscatedText += ';';
            } else if (charValue === 181) {
                deobfuscatedText += '=';
            } else if (charValue === 32) {
                deobfuscatedText += ' ';
            } else if (charValue === 10) {
                deobfuscatedText += '\n';
            } else if (charValue > 33) {
                deobfuscatedText += String.fromCharCode(charValue - 1);
            }
        }
        elem.innerHTML = deobfuscatedText;
    }
};

function deobfuscateText(selector) {
    const el = document.getElementsByClassName(selector);

    Array.prototype.forEach.call(el, (elem) => {
        new DeobfuscateText(elem);
    });
}

document.addEventListener('DOMContentLoaded', () => {
    if (sessionStorage.deobfuscate === 'true') {
        deobfuscateText('article__body');
    }

   ...