Password Generator


Copied!

History

                
$(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();
        });
    };
});