PASSWORD GENERATER

 <!DOCTYPE html>

<html>
<head>
<title>Page Title</title>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'>
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Kanit:300,500,700'>
<style>
@charset "UTF-8";
body {
  min-height: 100vh;
  padding-top: 100px;
  background: linear-gradient(20deg, #b2085a 0%, #52149e 51%, #089bd1 95%);
  font-family: "Kanit", sans-serif;
  font-weight: 300;
}

.instructions {
  font-size: 0.9rem;
  text-align: left;
}

h1, h2, h3, h4, h5, h6 {
  font-weight: 500;
  margin: 0;
}

.title-wrapper {
  background: #af5095;
  padding: 2px 10px;
  color: white;
}

h1 {
  font-size: 1.1rem;
}

.inner-wrapper {
  padding: 20px;
}

.wrapper {
  overflow: hidden;
  margin: auto;
  width: 90%;
  max-width: 380px;
  background: white;
  border-radius: 5px;
  box-shadow: 3px 3px 2px rgba(0, 0, 0, 0.4);
  display: -webkit-box;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
          flex-flow: column wrap;
}
.wrapper .password-wrapper {
  position: relative;
  border: 2px solid lightgray;
  color: gray;
  padding: 2px 2px 2px 8px;
  border-radius: 5px;
  text-align: left;
  display: -webkit-box;
  display: flex;
  -webkit-box-pack: justify;
          justify-content: space-between;
}
.wrapper .password-wrapper .alert {
  position: absolute;
  padding: 0 5px;
  border-radius: 2px;
  width: 21ch;
  height: 89%;
  left: 2px;
  top: -100%;
  width: 96%;
  text-align: center;
  color: #333;
  opacity: 0;
  -webkit-transition: all 0.5s ease;
  transition: all 0.5s ease;
}
.wrapper .password-wrapper .alert.success {
  background: rgba(88, 216, 191, 0.9);
  opacity: 1;
}
.wrapper .password-wrapper .alert.fail {
  background: rgba(188, 90, 118, 0.9);
  color: white;
  opacity: 1;
}
.wrapper .password-wrapper .copy {
  height: 100%;
  width: 50px;
  background: #af5095;
  border: 0;
  color: white;
  border-radius: 2px;
  padding: 8px;
  cursor: pointer;
  -webkit-transition: all 0.3s ease;
  transition: all 0.3s ease;
}
.wrapper .password-wrapper .copy:hover {
  background: #b762a0;
}
.wrapper .controls {
  text-align: left;
  display: -webkit-box;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
          flex-flow: column wrap;
}
.wrapper .controls .control {
  padding: 3px;
  border-bottom: 1px solid lightgray;
  width: 100%;
  margin: 2px;
}
.wrapper .controls .generate {
  width: 100%;
  border: 0;
  color: white;
  background: #af5095;
  border-radius: 3px;
  height: 25px;
  margin-top: 10px;
  -webkit-transition: all 0.3s ease;
  transition: all 0.3s ease;
}
.wrapper .controls .generate:hover {
  background: #b762a0;
}

#length-box {
  width: 100%;
}
#length-box input {
  width: 100%;
}

input[type="checkbox"] {
  visibility: hidden;
}

label.check-label {
  position: relative;
}
label.check-label:before {
  content: "";
  height: 1rem;
  width: 1rem;
  left: -24px;
  top: 0;
  border: 0.5px solid lightgray;
  position: absolute;
  background: transparent;
  -webkit-transition: all 0.3s cubic-bezier(0, 0.82, 1, 1.81);
  transition: all 0.3s cubic-bezier(0, 0.82, 1, 1.81);
}

input[type="checkbox"]:checked + label.check-label:before {
  content: "?";
  font-family: "FontAwesome";
  font-size: 0.8rem;
  color: #58d8bf;
  text-align: center;
  background: #d4f5ef;
  -webkit-transition: all 0.3s cubic-bezier(0, 0.82, 1, 1.81);
  transition: all 0.3s cubic-bezier(0, 0.82, 1, 1.81);
}
</style>
</head>
<body>
<div class="wrapper">
  <div class="title-wrapper">
    <h1 class="title">Password Generator</h1>
  </div>
  <div class="inner-wrapper">
    <div class="password-wrapper">
    <div class="password-here" id="password-here">
    ----
  </div>
    <button id="copy" class="copy">Copy</button>
    <div class="alert" id="alert"><span class="message" id="message"></div>
  </div>
  <p class="instructions">Select your options and click the "generate" button. Your passord will appear above.</p>
  <div class="controls">
    <div class="control length" id="length-box" >
      <label for="length">Password Length</label>
      <input type="range" id='length' min="4" max="20"list="tickmarks">
      <datalist id="tickmarks">
        <option value="4" label="4">
        <option value="5">
        <option value="6">
        <option value="7">
        <option value="8">        
        <option value="9">
        <option value="10">
        <option value="11">
        <option value="12" label="12">
        <option value="13">
        <option value="14">
        <option value="15">
        <option value="16">
        <option value="17">
        <option value="18">
        <option value="19">
        <option value="20">
      </datalist>
    </div>
    <div class="control">
      <input type="checkbox" id="lowercase">
      <label class="check-label" for="lowercase"><span class="checkbox">Use lowercase letters</span></label>
    </div>
    <div class="control">
      <input type="checkbox" id="uppercase">
      <label class="check-label" for="uppercase"><span class="checkbox">Use uppercase letters</span></label>
    </div>
    <div class="control">
      <input type="checkbox" id="numbers">
      <label class="check-label" for="numbers"><span class="checkbox">Use numbers</span></label>
    </div>
    <div class="control">
      <input type="checkbox" id="punctuation">
      <label class="check-label" for="punctuation"><span class="checkbox">Use special characters</span></label>
    </div>
    <button class="generate" id="generate">Generate!</button>
  </div>
  </div>
</div>

<script src='https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js'></script>
<script>
var clipboard = new Clipboard('.copy');
var lowercase = "abcdefghijklmnopqrstuvwxyz",
  uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
  numbers = "0123456789",
  punctuation = "!@#$%^&*()_+~`|}{[]:;?><,./-=",
  lowercaseInput = document.getElementById("lowercase"),
  uppercaseInput = document.getElementById("uppercase"),
  punctuationInput = document.getElementById("punctuation"),
  numbersInput = document.getElementById("numbers"),
  lengthInput = document.getElementById("length"),
  passwordFeild = document.getElementById("password-here"),
  generateButton = document.getElementById("generate"),
  copyButton = document.getElementById("copy"),
  plength,
  userPassword,
  passwordCharSet;

function generate() {
  userPassword = "";
  passwordCharSet = "";
  if (lowercaseInput.checked) {
    passwordCharSet += lowercase;
  }
  if (uppercaseInput.checked) {
    passwordCharSet += uppercase;
  }
  if (punctuationInput.checked) {
    passwordCharSet += punctuation;
  }
  if (numbersInput.checked) {
    passwordCharSet += numbers;
  }
  plength = Number(lengthInput.value);

  for (let i = 0; i < plength; i++) {
    userPassword += passwordCharSet.charAt(
      Math.floor(Math.random() * passwordCharSet.length)
    );
  }
  if (userPassword == "") {
    let alertbox = document.getElementById('alert');
    alertbox.innerHTML = "Please select an option before generating"
    alertbox.classList.add('fail');
    setTimeout(function(){ 
      alertbox.classList.remove('fail');
    }, 3000);
  } else {
    passwordFeild.innerHTML = userPassword;
  }
  copyButton.setAttribute("data-clipboard-text", userPassword)
}
generateButton.addEventListener("click", generate);

clipboard.on('success', function(e) {
    console.info('Action:', e.action);
    console.info('Text:', e.text);
    console.info('Trigger:', e.trigger);
    let alertbox = document.getElementById('alert');
    alertbox.innerHTML = "Copied!"
    alertbox.classList.add('success');
    setTimeout(function(){ 
      alertbox.classList.remove('success');
    }, 3000);
    
    e.clearSelection();
});

clipboard.on('error', function(e) {
    console.error('Action:', e.action);
    console.error('Trigger:', e.trigger);
  let alertbox = document.getElementById('alert');
    alertbox.innerHTML = "Try select the text to copy"
    alertbox.classList.add('fail');
    setTimeout(function(){ 
      alertbox.classList.remove('fail');
    }, 3000);
});
</script>
</body>
</html>

Comments