diff --git a/Javascript/main.js b/Javascript/main.js new file mode 100644 index 0000000..0599dac --- /dev/null +++ b/Javascript/main.js @@ -0,0 +1,98 @@ +const resultEl = document.getElementById('result'); +const lengthEl = document.getElementById('length'); +const uppercaseEl = document.getElementById('uppercase'); +const lowercaseEl = document.getElementById('lowercase'); +const numbersEl = document.getElementById('numbers'); +const symbolsEl = document.getElementById('symbols'); +const generateEl = document.getElementById('generate'); +const clipboard = document.getElementById('clipboard'); + +const randomFunc = { + lower: getRandomLower, + upper: getRandomUpper, + number: getRandomNumber, + symbol: getRandomSymbol +} + +clipboard.addEventListener('click', () => { + const textarea = document.createElement('textarea'); + const password = resultEl.innerText; + + if(!password) { return; } + + textarea.value = password; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + alert('Password copied to clipboard'); +}); + +generate.addEventListener('click', () => { + const length = +lengthEl.value; + const hasLower = lowercaseEl.checked; + const hasUpper = uppercaseEl.checked; + const hasNumber = numbersEl.checked; + const hasSymbol = symbolsEl.checked; + + resultEl.innerText = generatePassword(hasLower, hasUpper, hasNumber, hasSymbol, length); +}); + +function generatePassword(lower, upper, number, symbol, length) { + let generatedPassword = ''; + const typesCount = lower + upper + number + symbol; + const typesArr = [{lower}, {upper}, {number}, {symbol}].filter(item => Object.values(item)[0]); + + // Doesn't have a selected type + if(typesCount === 0) { + return ''; + } + + // create a loop + for(let i=0; i { + const funcName = Object.keys(type)[0]; + generatedPassword += randomFunc[funcName](); + }); + } + + const finalPassword = generatedPassword.slice(0, length); + + return finalPassword; +} + +function getRandomLower() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 97); +} + +function getRandomUpper() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 65); +} + +function getRandomNumber() { + return +String.fromCharCode(Math.floor(Math.random() * 10) + 48); +} + +function getRandomSymbol() { + const symbols = '!@#$%^&*(){}[]=<>/,.' + return symbols[Math.floor(Math.random() * symbols.length)]; +} + + + + + + + +// SOCIAL PANEL JS +const floating_btn = document.querySelector('.floating-btn'); +const close_btn = document.querySelector('.close-btn'); +const social_panel_container = document.querySelector('.social-panel-container'); + +floating_btn.addEventListener('click', () => { + social_panel_container.classList.toggle('visible') +}); + +close_btn.addEventListener('click', () => { + social_panel_container.classList.remove('visible') +}); \ No newline at end of file