generated from tod/odin-webpack-template
			Compare commits
	
		
			3 Commits
		
	
	
		
			27117cd641
			...
			12eb673c90
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						12eb673c90 | |
| 
							
							
								
								 | 
						ec621d42b3 | |
| 
							
							
								
								 | 
						84cb547df8 | 
| 
						 | 
					@ -12,10 +12,9 @@
 | 
				
			||||||
      <input name="email" id="email" type="email" required placeholder="Email (christopher@example.com)">
 | 
					      <input name="email" id="email" type="email" required placeholder="Email (christopher@example.com)">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <input name="country" id="country" type="text" list="countries-list" required placeholder="Country (United Kingdom)">
 | 
					      <input name="country" id="country" type="text" list="countries-list" required placeholder="Country (United Kingdom)">
 | 
				
			||||||
      <output id="country-info"></output>
 | 
					 | 
				
			||||||
      <datalist id="countries-list"></datalist>
 | 
					      <datalist id="countries-list"></datalist>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <input name="zip" id="zip" type="text" required placeholder="ZIP code (12-345)" pattern="\d{2}-\d{3}">
 | 
					      <input name="zip" id="zip" type="text" required placeholder="ZIP code (12-345)">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <input name="password" id="password" type="password" required placeholder="Password (Pa$Sw0rD)">
 | 
					      <input name="password" id="password" type="password" required placeholder="Password (Pa$Sw0rD)">
 | 
				
			||||||
      <div id="password-check">
 | 
					      <div id="password-check">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										25
									
								
								src/main.js
								
								
								
								
							
							
						
						
									
										25
									
								
								src/main.js
								
								
								
								
							| 
						 | 
					@ -41,23 +41,34 @@ document.addEventListener("DOMContentLoaded", () => {
 | 
				
			||||||
      const formData = new FormData(form);
 | 
					      const formData = new FormData(form);
 | 
				
			||||||
      const formDataValue = formData.values();
 | 
					      const formDataValue = formData.values();
 | 
				
			||||||
      const [email, country, zip] = Array(5).fill(formDataValue.next().value);
 | 
					      const [email, country, zip] = Array(5).fill(formDataValue.next().value);
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
        alert(
 | 
					        alert(
 | 
				
			||||||
          `Success!\nEmail: ${email}\nCountry: ${country}\nZIP: ${zip}\nPassword: [redacted]`,
 | 
					          `Success!\nEmail: ${email}\nCountry: ${country}\nZIP: ${zip}\nPassword: [redacted]`,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					      }, 600);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      alert("Hold up, one or more fields are invalid! Try again");
 | 
					      alert("Hold up, one or more fields are invalid! Try again");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  countryInput.addEventListener("input", () => {
 | 
					  countryInput.addEventListener("input", () => {
 | 
				
			||||||
    countryInput.setAttribute(
 | 
					    const valid = countryInput.value.search(COUNTRY_REGEX) >= 0;
 | 
				
			||||||
      "input-valid",
 | 
					    countryInput.setAttribute("input-valid", valid);
 | 
				
			||||||
      countryInput.value.search(COUNTRY_REGEX) >= 0,
 | 
					    if (valid) {
 | 
				
			||||||
    );
 | 
					      countryInput.setCustomValidity("");
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      countryInput.setCustomValidity("Invalid country");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  countryInput.addEventListener("change", () => {
 | 
					  zipInput.addEventListener("input", () => {
 | 
				
			||||||
    document.querySelector("#country-info").textContent =
 | 
					    const valid = zipInput.value.search(/\d{2}-\d{3}/) >= 0;
 | 
				
			||||||
      countryInput.value.search(COUNTRY_REGEX) >= 0 ? "" : "Invalid country";
 | 
					    zipInput.setAttribute("input-valid", valid);
 | 
				
			||||||
 | 
					    if (valid) {
 | 
				
			||||||
 | 
					      zipInput.setCustomValidity("");
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      zipInput.setCustomValidity("ZIP Code format should be 12-345");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  passwordInput.addEventListener("input", checkPasswordValidity);
 | 
					  passwordInput.addEventListener("input", checkPasswordValidity);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,18 +19,20 @@ function checkPasswordMatch() {
 | 
				
			||||||
    passwordInput.value === ""
 | 
					    passwordInput.value === ""
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    passwordMatch.style.backgroundColor = "";
 | 
					    passwordMatch.style.backgroundColor = "";
 | 
				
			||||||
 | 
					    passwordConfirmInput.setCustomValidity("Passwords don't match");
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  passwordMatch.style.backgroundColor = "#4b4";
 | 
					  passwordMatch.style.backgroundColor = "#4b4";
 | 
				
			||||||
 | 
					  passwordConfirmInput.setCustomValidity("");
 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function checkPasswordRequirement(e, regex, element) {
 | 
					function checkPasswordRequirement(regex, requirementElement) {
 | 
				
			||||||
  if (e.value.search(regex) >= 0) {
 | 
					  if (passwordInput.value.search(regex) >= 0) {
 | 
				
			||||||
    element.style.backgroundColor = "#4b4";
 | 
					    requirementElement.style.backgroundColor = "#4b4";
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  element.style.backgroundColor = "";
 | 
					  requirementElement.style.backgroundColor = "";
 | 
				
			||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,23 +43,18 @@ function checkPasswordValidity() {
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    passwordLength.style.backgroundColor = "";
 | 
					    passwordLength.style.backgroundColor = "";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  const lowercase = checkPasswordRequirement(
 | 
					  const lowercase = checkPasswordRequirement(/[a-z]/, passwordLowercase);
 | 
				
			||||||
    passwordInput,
 | 
					  const uppercase = checkPasswordRequirement(/[A-Z]/, passwordUppercase);
 | 
				
			||||||
    /[a-z]/,
 | 
					  const number = checkPasswordRequirement(/\d/, passwordNumber);
 | 
				
			||||||
    passwordLowercase,
 | 
					  const special = checkPasswordRequirement(/[#?!@$%^&*-]/, passwordSpecial);
 | 
				
			||||||
  );
 | 
					  const suitsRequirements =
 | 
				
			||||||
  const uppercase = checkPasswordRequirement(
 | 
					    length && lowercase && uppercase && number && special;
 | 
				
			||||||
    passwordInput,
 | 
					  if (suitsRequirements) {
 | 
				
			||||||
    /[A-Z]/,
 | 
					    passwordInput.setCustomValidity("");
 | 
				
			||||||
    passwordUppercase,
 | 
					  } else {
 | 
				
			||||||
  );
 | 
					    passwordInput.setCustomValidity("Password does not meet requirements");
 | 
				
			||||||
  const number = checkPasswordRequirement(passwordInput, /\d/, passwordNumber);
 | 
					  }
 | 
				
			||||||
  const special = checkPasswordRequirement(
 | 
					  return suitsRequirements;
 | 
				
			||||||
    passwordInput,
 | 
					 | 
				
			||||||
    /[#?!@$%^&*-]/,
 | 
					 | 
				
			||||||
    passwordSpecial,
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
  return length && lowercase && uppercase && number && special;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { checkPasswordValidity, checkPasswordMatch };
 | 
					export { checkPasswordValidity, checkPasswordMatch };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue