32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
/* ── Password strength meter (shared by base.html and standalone pages) ── */
|
|
function _pwStrengthLevel(pw) {
|
|
var score = 0;
|
|
if (pw.length >= 8) score++;
|
|
if (pw.length >= 12) score++;
|
|
if (/[A-Z]/.test(pw)) score++;
|
|
if (/[0-9]/.test(pw)) score++;
|
|
if (/[^A-Za-z0-9]/.test(pw)) score++;
|
|
var map = ['pw-weak','pw-weak','pw-fair','pw-strong','pw-great','pw-great'];
|
|
var lbl = ['Weak','Weak','Fair','Strong','Very strong','Very strong'];
|
|
return { cls: map[score], label: lbl[score] };
|
|
}
|
|
|
|
function attachPasswordStrength(inputId, fillId, labelId) {
|
|
var input = document.getElementById(inputId);
|
|
var fill = document.getElementById(fillId);
|
|
var lbl = document.getElementById(labelId);
|
|
if (!input || !fill || !lbl) return;
|
|
input.addEventListener('input', function() {
|
|
if (!this.value) {
|
|
fill.className = 'pw-strength-fill';
|
|
lbl.className = 'pw-strength-label';
|
|
lbl.textContent = '';
|
|
return;
|
|
}
|
|
var r = _pwStrengthLevel(this.value);
|
|
fill.className = 'pw-strength-fill ' + r.cls;
|
|
lbl.className = 'pw-strength-label ' + r.cls;
|
|
lbl.textContent = r.label;
|
|
});
|
|
}
|