UNPKG

leet-speak-converter

Version:

A smart and simple utility to convert text into leet speak.

129 lines (112 loc) 3.28 kB
// Web version of l33t speak converter const buttonEl = document.querySelector('.leet-button') const checkboxAdvancedEl = document.querySelector('.leet-advanced') const checkboxReverseEl = document.querySelector('.leet-reverse') const resultEl = document.querySelector('.leet-result') const textareaEl = document.querySelector('.leet-textarea') const alphabetBasic = { 'a': '4', 'b': '8', 'e': '3', 'f': 'ph', 'g': '6', // or 9 'i': '1', // or | 'o': '0', 's': '5', 't': '7' // or + } const alphabetAdvanced = { 'c': '(', // or k or |< or /< 'd': '<|', 'h': '|-|', 'k': '|<', // or /< 'l': '|', // or 1 'm': '|\\/|', 'n': '|\\|', 'p': '|2', 'u': '|_|', 'v': '/', // or \/ 'w': '//', // or \/\/ 'x': '><', 'y': '\'/' } const alphabetReversed = [ [/(\|\\\/\|)/g, 'm'], [/(\|\\\|)/g, 'n'], [/(\()/g, 'c'], [/(<\|)/g, 'd'], [/\|-\|/g, 'h'], [/(\|<)/g, 'k'], [/(\|2)/g, 'p'], [/(\|_\|)/g, 'u'], [/(\/\/)/g, 'w'], [/(><)/g, 'x'], [/(\|)/g, 'l'], [/(\'\/)/g, 'y'], [/(\/)/g, 'v'], [/(1)/g, 'i'], [/(0)/g, 'o'], [/(3)/g, 'e'], [/(4)/g, 'a'], [/(5)/g, 's'], [/(6)/g, 'g'], [/(7)/g, 't'], [/(8)/g, 'b'], [/(ph)/g, 'f'], ] // If user wants to use advanced l33t conversion, disable option for conversion from l33t to text checkboxAdvancedEl.addEventListener('click', (e) => { if (e.target.checked) { checkboxReverseEl.setAttribute('disabled', true) checkboxReverseEl.parentNode.classList.add('switch--inactive') } else { checkboxReverseEl.removeAttribute('disabled') checkboxReverseEl.parentNode.classList.remove('switch--inactive') } }) // If user wants to use conversion from l33t to text, disable option for advanced l33t conversion checkboxReverseEl.addEventListener('click', (e) => { if (e.target.checked) { checkboxAdvancedEl.setAttribute('disabled', true) checkboxAdvancedEl.parentNode.classList.add('switch--inactive') } else { checkboxAdvancedEl.removeAttribute('disabled') checkboxAdvancedEl.parentNode.classList.remove('switch--inactive') } }) // Convert input into l33t const convertInput = (text, useAdvanced = 'n') => { for (let i = 0; i < text.length; i++) { let alphabet let letter = text[i].toLowerCase() if (useAdvanced.toLowerCase() === 'y') { // Use advanced l33t speak alphabet alphabet = alphabetBasic[letter] ? alphabetBasic[letter] : alphabetAdvanced[letter] } else { // Use basic l33t speak alphabet alphabet = alphabetBasic[letter] } if (alphabet) { text = text.replace(text[i], alphabet) } } return text } const convertInputReverse = (text) => { text = text.toLowerCase() alphabetReversed.map((x) => { text = text.replace(x[0], x[1]) }) return text } buttonEl.addEventListener('click', () => { let text = textareaEl.value let useAdvanced = checkboxAdvancedEl.checked ? 'y' : 'n' let convertReversed = checkboxReverseEl.checked ? 'y' : 'n' if (convertReversed.toLowerCase() === 'y') { text = convertInputReverse(text) } else { text = convertInput(text, useAdvanced) } resultEl.value = text })