Skip to content

Commit c3bc03b

Browse files
committed
add finished strong password
1 parent 7e4b5f7 commit c3bc03b

File tree

1 file changed

+60
-7
lines changed

1 file changed

+60
-7
lines changed

31-password generator/script.js

+60-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
const resultElement = document.getElementById("result");
2+
const lengthElement = document.getElementById("length");
3+
const uppercaseElement = document.getElementById("uppercase");
4+
const lowercaseElement = document.getElementById("lowercase");
5+
const numbersElement = document.getElementById("numbers");
6+
const symbolsElement = document.getElementById("symbols");
7+
const generateElement = document.getElementById("generate");
8+
const clipboardElement = document.getElementById("clipboard");
9+
110
// Random functions
211
// fromCharCode: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
312
// ASCII codes: https://www.w3schools.com/charsets/ref_html_ascii.asp
4-
const randomFunctions = {
5-
lower: getRandomLower,
6-
upper: getRandomUpper,
7-
number: getRandomSymbol,
8-
symbol: getRandomSymbol,
9-
};
10-
1113
const getRandomLower = () =>
1214
String.fromCharCode(Math.floor(Math.random() * 26) + 97);
1315

@@ -21,3 +23,54 @@ const getRandomSymbol = () => {
2123
const symbols = "!@#$%^&*(){}[]=<>/,.";
2224
return symbols[Math.floor(Math.random() * symbols.length)];
2325
};
26+
27+
const randomFunctions = {
28+
lower: getRandomLower,
29+
upper: getRandomUpper,
30+
number: getRandomSymbol,
31+
symbol: getRandomSymbol,
32+
};
33+
34+
clipboardElement.addEventListener("click", () => {
35+
const password = resultElement.innerText;
36+
if (!password) return;
37+
const textarea = document.createElement("textarea");
38+
textarea.value = password;
39+
document.body.appendChild(textarea);
40+
textarea.select();
41+
document.execCommand("copy");
42+
textarea.remove();
43+
alert("Password copied to clipboard!");
44+
});
45+
46+
generateElement.addEventListener("click", () => {
47+
const length = +lengthElement.value;
48+
const hasLower = lowercaseElement.checked;
49+
const hasUpper = uppercaseElement.checked;
50+
const hasNumber = numbersElement.checked;
51+
const hasSymbol = symbolsElement.checked;
52+
resultElement.innerText = generatePassword(
53+
hasLower,
54+
hasUpper,
55+
hasNumber,
56+
hasSymbol,
57+
length
58+
);
59+
});
60+
61+
const generatePassword = (lower, upper, number, symbol, length) => {
62+
let generatedPassword = "";
63+
const typesCount = lower + upper + number + symbol;
64+
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
65+
(item) => Object.values(item)[0]
66+
);
67+
if (typesCount === 0) return "";
68+
for (let i = 0; i < length; i += typesCount) {
69+
typesArr.forEach((type) => {
70+
const funcName = Object.keys(type)[0];
71+
generatedPassword += randomFunctions[funcName]();
72+
});
73+
}
74+
const finalPassword = generatedPassword.slice(0, length);
75+
return finalPassword;
76+
};

0 commit comments

Comments
 (0)