This commit is contained in:
Tchi
2021-07-19 23:21:33 +02:00
parent 9a0be1df7d
commit 2b171ab4b6
3 changed files with 110 additions and 60 deletions
+69 -39
View File
@@ -4,65 +4,95 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<link href="styles/style.css" rel="stylesheet"> <link href="styles/style.css" rel="stylesheet">
<title>Générateur de MDP</title> <title>Générateur de MDP</title>
</head> </head>
<body> <body onload="init()">
<div class="container"> <div class="container">
<div class="card">
<!-- Resultat --> <!-- Resultat -->
<div> <div class="resultat">
<span id="password">Générateur de mot de passe</span> <span id="password">Générateur de mot de passe</span>
</div>
<!-- Paramètres -->
<fieldset>
<legend>Paramètres :</legend>
<div>
<input type="checkbox" id="caps-checkbox" name="caps-checkbox">
<label for="caps-checkbox">Majuscules</label>
</div>
<div>
<input type="checkbox" id="numbers-checkbox" name="numbers-checkbox">
<label for="numbers-checkbox">Nombres</label>
</div>
<div>
<input type="checkbox" id="specials-checkbox" name="specials-checkbox">
<label for="specials-checkbox">Caractères spéciaux</label>
</div>
<div>
<input type="range" name="nbDigits-range" id="nbDigits-range" min="1" , max="25" step="1">
<label for="nbDigits-range">Nombre de caractères</label>
</div>
<div>
<input type="button" id="submit-button" value="Generate" onclick="generate()">
</div>
</fieldset>
</div> </div>
<div>
<label id="nbDigits-range-label"
for="nbDigits-range">Longueur ()</label>
<input type="range" name="nbDigits-range" id="nbDigits-range"
value="16" min="4" , max="40" step="1">
</div>
<!-- Paramètres -->
<table>
<tr>
<td>
<input type="checkbox"
id="caps-checkbox" name="caps-checkbox">
<label for="caps-checkbox">Majuscules</label>
</td>
<td>
<input type="checkbox"
id="numbers-checkbox" name="numbers-checkbox">
<label for="numbers-checkbox">Nombres</label>
</td>
<td>
<input type="checkbox"
id="specials-checkbox" name="specials-checkbox">
<label for="specials-checkbox">Caractères spéciaux</label>
</td>
<td>
<input type="button"
id="submit-button" value="Generate">
</td>
</tr>
</table>
</div> </div>
<script src="scripts/main.js"></script> <script src="scripts/main.js"></script>
<script> <script>
function generate() { function init() {
/* HTML Elements */ updateNbDigitsRange()
let capsCheckBox = document.getElementById("caps-checkbox"); generate()
let numbersCheckBox = document.getElementById("numbers-checkbox"); }
let specialsCheckBox = document.getElementById("specials-checkbox");
let nbDigitsRange = document.getElementById("nbDigits-range");
let passwordInput = document.getElementById("password");
function generate() {
/* Values */ /* Values */
var nbDigits = nbDigitsRange.value var nbDigits = nbDigitsRange.value
var hasCaps = capsCheckBox.checked; var hasCaps = capsCheckBox.checked;
var hasNumbers = numbersCheckBox.checked; var hasNumbers = numbersCheckBox.checked;
var hasSpecials = specialsCheckBox.checked; var hasSpecials = specialsCheckBox.checked;
var passwordGenerated = generatePassword(nbDigits, hasCaps, hasNumbers, hasSpecials) var passwordGenerated = generatePassword(nbDigits,
hasCaps,
hasNumbers,
hasSpecials)
password.innerHTML = passwordGenerated password.innerHTML = passwordGenerated
} }
function updateNbDigitsRange() {
var nbDigits = nbDigitsRange.value
nbDigitsRangeLabel.innerHTML = `Longueur (${nbDigits})`
}
/* HTML Elements */
let capsCheckBox = document.getElementById("caps-checkbox");
let numbersCheckBox = document.getElementById("numbers-checkbox");
let specialsCheckBox = document.getElementById("specials-checkbox");
let nbDigitsRange = document.getElementById("nbDigits-range");
let passwordInput = document.getElementById("password");
let nbDigitsRangeLabel = document.getElementById("nbDigits-range-label")
let submitButton = document.getElementById("submit-button");
/* Events */
capsCheckBox.addEventListener("input", () => generate())
numbersCheckBox.addEventListener("input", () => generate())
specialsCheckBox.addEventListener("input", () => generate())
submitButton.addEventListener("click", () => generate())
nbDigitsRange.addEventListener("input", () => {
updateNbDigitsRange()
generate()
})
</script> </script>
</body> </body>
+4 -3
View File
@@ -2,20 +2,21 @@ function generatePassword(nbDigits, caps, numbers, specials) {
var resultat = "" var resultat = ""
for (let i = 0; i < nbDigits ; i++) { for (let i = 0; i < nbDigits ; i++) {
resultat += generateCharacter(caps, numbers, specials) resultat += generateCharacter(true, caps, numbers, specials)
} }
return resultat return resultat
} }
function generateCharacter(caps, numbers, specials) { function generateCharacter(letters, caps, numbers, specials) {
var LETTERS_TABLE = "abcdefghijklmnopqrstuvwxyz" var LETTERS_TABLE = "abcdefghijklmnopqrstuvwxyz"
var CAPS_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" var CAPS_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var NUMBERS_TABLE = "0123456789" var NUMBERS_TABLE = "0123456789"
var SPECIALS_TABLE = "!#$%&'()*+,-./:;=?@[]^_`{|}~"; var SPECIALS_TABLE = "!#$%&'()*+,-./:;=?@[]^_`{|}~";
var resultat = LETTERS_TABLE var resultat = ""
if (letters) resultat += LETTERS_TABLE
if (caps) resultat += CAPS_TABLE if (caps) resultat += CAPS_TABLE
if (numbers) resultat += NUMBERS_TABLE if (numbers) resultat += NUMBERS_TABLE
if (specials) resultat += SPECIALS_TABLE if (specials) resultat += SPECIALS_TABLE
+37 -18
View File
@@ -1,38 +1,57 @@
@import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap');
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
width: 100%; width: 100%;
height: 100vh; height: 100vh;
font-family: 'Open Sans', sans-serif;
background-color: #2c3e50; background-color: #2c3e50;
color: #ecf0f1; color: #ecf0f1;
} }
.container { .container {
text-align: center;
height: 100%; height: 100%;
display: grid; padding: 2.5rem 10rem;
} }
.card { .resultat {
width: 500px; padding: 25px 0;
height: 700px;
margin: auto;
padding: 25px;
background-color: #34495e;
border-radius: 10px;
} }
#password { #password {
background-color: #2c3e50;
padding: 0 10px; font-size: 2rem;
font-size: 2em;
border-radius: 10px; border-radius: 10px;
font-family : consolas font-family: consolas;
color: #2ecc71;
} }
fieldset div { /* General Range */
text-align: left; input[type="range"] {
} -webkit-appearance: none;
margin: 18px 0;
width: 100%;
border-radius: 8px;
}
input[type="range"]:focus {
outline: none;
}
/* Chrome Range */
input[type="range"]::-webkit-slider-runnable-track {
height: 8px;
cursor: pointer;
background-color: #ecf0f1;
border-radius: 8px;
}
input[type="range"]::-webkit-slider-thumb {
height: 30px;
width: 30px;
border-radius: 50%;
background: #ffffff;
cursor: pointer;
-webkit-appearance: none;
margin-top: calc( (8px - 30px) / 2);
}