$(window).on('load', function () {
var alphaSelection = []
var passLength = 16;
var lower = "abcdefghijklmnopqrstuvwxyz";
var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numeric = "1234567890";
var special = "!#$%&'()*+,-/:;=?@[]^_`{|}~";
var history = [];
$("#code").hide();
// Listen to password length range selector and update variable
$('#passLength').on('change',
function(){
passLength = this.value;
$('#lengthLabel').html('Number of Characters: ' + this.value);
generatePass();
});
// Listen to check box changes for upper, lower, numeric, special and update alphaSelection array.
// Each action generates a new password based on active check boxes
$('input:checkbox').on('change',
function(){
if ($(this).is(':checked')) {
alphaSelection.push(this.name);
generatePass();
}
if (!$(this).is(':checked')) {
var start = alphaSelection.indexOf(this.name);
alphaSelection.splice(start, 1);
generatePass();
}
});
// input group button function calls
$('#refreshPass').on('click', generatePass);
$('#copyPass').on('click', copyPassword);
// disable form submission from text input
$('#passGenerator').on('submit', false);
$('#showCode').on('click', function(){
$("#code").toggle();
});
// number generator for selecting characters from charGroup string
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
//The maximum is exclusive and the minimum is inclusive
return Math.floor(Math.random() * (max - min) + min);
}
// password generation function
function generatePass() {
// empty character array & clear password string
var chars = [];
var pass = "";
// check which selection is made for eligible characters & push to array
for (i = 0; i < alphaSelection.length; i++) {
if (alphaSelection[i] == 'lowercase') {
chars.push(lower);
} else if (alphaSelection[i] == 'uppercase') {
chars.push(upper);
} else if (alphaSelection[i] == 'numbers') {
chars.push(numeric);
} else if (alphaSelection[i] == 'special') {
chars.push(special);
}
}
// form full character string to select password from
charGroup = chars.join('');
// default characters in case of no selection
if (charGroup.length < 1) {
charGroup = lower;
}
// generate password string
while (pass.length < passLength) {
pass += charGroup[getRandomInt(0, charGroup.length)];
}
// set string as text input value
$('#generatedString').val(pass);
// push string to history array
history.push(pass);
// history display list
$('#historyList').prepend(`<li>${pass}</li>`);
};
// Copy password to clipboard
function copyPassword() {
/* Get the text field */
var copyText = $('#generatedString').val();
/* Copy the text inside the text field */
navigator.clipboard.writeText(copyText);
// confirm copy success for user
showSnackbar();
}
// Show copied confirmation
function showSnackbar() {
// Add the "show" class to DIV
$("#snackbarSuccess").addClass('show');
// After 3 seconds, remove the show class from DIV
setTimeout(function(){ $("#snackbarSuccess").removeClass('show'); }, 3000);
}
generatePass();
//preloader for all pages
if ($('#preloader').length) {
$('#preloader').delay(1000).fadeOut('slow', function () {
$(this).remove();
});
};
});