yesod-auth-simple-1.1.0: templates/password-field-zxcvbn.julius
var yas__extraWordsEl = document.getElementById("yas__extra-words");
var yas__extraWords = [];
if (yas__extraWordsEl) {
var str = yas__extraWordsEl.getAttribute("data-extra-words");
if (Boolean(str)) { yas__extraWords = str.split(" "); }
}
var yas__passwordFeedback = document.getElementById("yas--password-feedback");
var yas__passwordMeter = yas__passwordFeedback.querySelector(".yas--password-meter");
var yas__passwordErrors = yas__passwordFeedback.querySelector(".yas--password-errors");
function yas_showError() {
var warningEl = yas__passwordErrors.querySelector(".yas--password-warning");
warningEl.appendChild(document.createTextNode("Error requesting password strength"));
}
function yas_updateFeedback (password, strength) {
var gotScore = typeof strength.score === "number";
var score, feedback, jsResult;
if (!gotScore || strength.score <= 2 || strength.score < #{toJSON $ fromEnum minStren}) {
jsResult = zxcvbn(password, yas__extraWords);
feedback = jsResult.feedback;
}
if (gotScore) { score = strength.score; }
else { score = jsResult.score; }
yas__passwordMeter.classList.add("yas--strength-" + score);
yas__passwordMeter.classList.remove("yas--strength-init");
for (var i=0; i<5; i++) {
if (i !== score) {
yas__passwordMeter.classList.remove("yas--strength-" + i);
}
}
var warningEl = yas__passwordErrors.querySelector(".yas--password-warning");
while (warningEl.firstChild) { warningEl.removeChild(warningEl.firstChild); }
var tips = yas__passwordErrors.querySelector(".yas--password-suggestions");
while (tips && tips.firstChild) { tips.removeChild(tips.firstChild); }
if (Boolean(password) && score < #{toJSON $ fromEnum minStren}) {
var warning;
if (Boolean(strength.error)) {
warning = strength.error;
} else {
warning = "The password is not strong enough";
}
if (Boolean(feedback.warning)) {
warning = warning + ". " + feedback.warning;
}
warningEl.appendChild(document.createTextNode(warning));
if (feedback.suggestions.length > 0) {
var suggestionList = document.createElement("ul");
for (var i=0; i<feedback.suggestions.length; i++) {
var li = document.createElement("li");
var txt = document.createTextNode(feedback.suggestions[i]);
li.classList.add("yas--suggestion");
li.appendChild(txt);
suggestionList.appendChild(li);
}
tips.appendChild(suggestionList);
}
}
}
var yas_currentReq = 0;
function yas_getPasswordStrength(password) {
var req = new XMLHttpRequest();
var reqNum = yas_currentReq + 1;
req.onreadystatechange = function(resp) {
if (req.readyState === XMLHttpRequest.DONE) {
if (req.status === 200) {
var resp = JSON.parse(req.responseText);
if (reqNum <= yas_currentReq) {
yas_updateFeedback(password, resp);
}
} else {
yas_updateFeedback("", #{toJSON blankPasswordScore});
yas_showError();
}
}
};
req.open("POST", "@{toParent passwordStrengthR}", true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(#{defaultCsrfParamName} + "=" + #{fromMaybe "no-csrf-token" mCsrfToken}
+ "&password=" + encodeURIComponent(password));
yas_currentReq += 1;
}
function yas_debounce(delay, fn) {
var timeout;
return function () {
if (timeout) { clearTimeout(timeout); }
timeout = setTimeout(fn.apply.bind(fn, this, arguments), delay);
};
}
var yas_getPasswordStrengthDeb = yas_debounce(200, yas_getPasswordStrength);
function yas_onPasswordChange(e) {
if (Boolean(e.target.value) && e.target.value.length < #{toJSON maxPasswordLength}) {
yas_getPasswordStrengthDeb(e.target.value);
} else if (!Boolean(e.target.value)) {
yas_updateFeedback("", #{toJSON blankPasswordScore});
}
}
document.getElementById("password").addEventListener("input", yas_onPasswordChange);