-
Notifications
You must be signed in to change notification settings - Fork 0
/
ui.js
130 lines (112 loc) · 4.17 KB
/
ui.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
$(document).ready(function() {
var DEFAULT_LENGTH = 8;
var DEFAULT_HAS_DIGITS = true;
var DEFAULT_HAS_LOWERCASE_LETTERS = true;
var DEFAULT_HAS_UPPERCASE_LETTERS = true;
var DEFAULT_HAS_SPACES = false;
var DEFAULT_HAS_SPECIAL_CHARS = false;
var DEFAULT_MIN_NUM_DIGITS = 1;
var DEFAULT_MIN_NUM_LOWERCASE_LETTERS = 1;
var DEFAULT_MIN_NUM_UPPERCASE_LETTERS = 1;
var inputs = {
length: $('input[name="length"]'),
useDigitsCheckbox: $('input[name="use_digits"]'),
useLowercaseLettersCheckbox: $('input[name="use_lowercase_letters"]'),
useUppercaseLettersCheckbox: $('input[name="use_uppercase_letters"]'),
minNumDigits: $('input[name="min_num_digits"]'),
minNumLowercaseLetters: $('input[name="min_num_lowercase_letters"]'),
minNumUppercaseLetters: $('input[name="min_num_uppercase_letters"]')
}
function setDefaults() {
inputs.length.val(DEFAULT_LENGTH);
inputs.useDigitsCheckbox.prop("checked", DEFAULT_HAS_DIGITS);
inputs.useLowercaseLettersCheckbox.prop("checked", DEFAULT_HAS_LOWERCASE_LETTERS);
inputs.useUppercaseLettersCheckbox.prop("checked", DEFAULT_HAS_LOWERCASE_LETTERS);
inputs.minNumDigits.val(DEFAULT_MIN_NUM_DIGITS);
inputs.minNumLowercaseLetters.val(DEFAULT_MIN_NUM_LOWERCASE_LETTERS);
inputs.minNumUppercaseLetters.val(DEFAULT_MIN_NUM_UPPERCASE_LETTERS);
}
function setPasswordFromSettings() {
// clear prev error message
$('#error-message').text('');
var length = parseInt(inputs.length.val());
var hasDigits = inputs.useDigitsCheckbox.prop("checked");
var hasLowercaseLetters = inputs.useLowercaseLettersCheckbox.prop("checked");
var hasUppercaseLetters = inputs.useUppercaseLettersCheckbox.prop("checked");
var hasSpaces = $('input[name="use_spaces"]').prop("checked");
var hasSpecialChars = $('input[name="use_special_chars"]').prop("checked");
// minimum numbers
if(inputs.minNumDigits.prop("disabled")) {
var minNumDigits = 0;
} else {
var minNumDigits = parseInt(inputs.minNumDigits.val());
}
if(inputs.minNumLowercaseLetters.prop("disabled")) {
var minNumLowercaseLetters = 0;
} else {
var minNumLowercaseLetters = parseInt(inputs.minNumLowercaseLetters.val());
}
if(inputs.minNumUppercaseLetters.prop("disabled")) {
var minNumUppercaseLetters = 0;
} else {
var minNumUppercaseLetters = parseInt(inputs.minNumUppercaseLetters.val());
}
try {
var generatedPassword = generatePassword(
length || DEFAULT_LENGTH,
hasDigits,
hasLowercaseLetters,
hasUppercaseLetters,
hasSpaces,
hasSpecialChars,
minNumDigits,
minNumLowercaseLetters,
minNumUppercaseLetters
);
$('#generated-password').text(generatedPassword);
}
catch(err) {
$('#error-message').text(err);
}
}
// check if digits/lowercase/uppercase checkboxes are checked, if not checked, disable min inputs
function addEventHandlers() {
inputs.useDigitsCheckbox.on('change', function() {
if(!$(this).prop("checked")) {
inputs.minNumDigits.prop("disabled", true);
} else {
inputs.minNumDigits.prop("disabled", false);
}
});
inputs.useLowercaseLettersCheckbox.on('change', function() {
if(!$(this).prop("checked")) {
inputs.minNumLowercaseLetters.prop("disabled", true);
} else {
inputs.minNumLowercaseLetters.prop("disabled", false);
}
});
inputs.useUppercaseLettersCheckbox.on('change', function() {
if(!$(this).prop("checked")) {
inputs.minNumUppercaseLetters.prop("disabled", true);
} else {
inputs.minNumUppercaseLetters.prop("disabled", false);
}
});
// select all min num inputs
var minNumInputs = inputs.minNumDigits
.add(inputs.minNumLowercaseLetters)
.add(inputs.minNumUppercaseLetters);
// on blur, if input is empty, make it into 0
minNumInputs.on('blur', function() {
if($(this).val() == '') {
$(this).val(0);
}
});
// when user clicks button, generate password
$('#generate-password-button').on('click', setPasswordFromSettings);
}
setDefaults();
// generate password by default on page load
setPasswordFromSettings();
addEventHandlers();
});