/** * DO NOT EDIT THIS FILE. * See the following change record for more information, * https://www.drupal.org/node/2815083 * @preserve **/ (function ($, Drupal, drupalSettings) { Drupal.behaviors.password = { attach: function attach(context, settings) { var $passwordInput = $(context).find('input.js-password-field').once('password'); if ($passwordInput.length) { var translate = settings.password; var $passwordInputParent = $passwordInput.parent(); var $passwordInputParentWrapper = $passwordInputParent.parent(); var $passwordSuggestions = void 0; $passwordInputParent.addClass('password-parent'); $passwordInputParentWrapper.find('input.js-password-confirm').parent().append('
' + translate.confirmTitle + '
').addClass('confirm-parent'); var $confirmInput = $passwordInputParentWrapper.find('input.js-password-confirm'); var $confirmResult = $passwordInputParentWrapper.find('div.js-password-confirm'); var $confirmChild = $confirmResult.find('span'); if (settings.password.showStrengthIndicator) { var passwordMeter = '
' + translate.strengthTitle + '
'; $confirmInput.parent().after('
'); $passwordInputParent.append(passwordMeter); $passwordSuggestions = $passwordInputParentWrapper.find('div.password-suggestions').hide(); } var passwordCheckMatch = function passwordCheckMatch(confirmInputVal) { var success = $passwordInput.val() === confirmInputVal; var confirmClass = success ? 'ok' : 'error'; $confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')]).removeClass('ok error').addClass(confirmClass); }; var passwordCheck = function passwordCheck() { if (settings.password.showStrengthIndicator) { var result = Drupal.evaluatePasswordStrength($passwordInput.val(), settings.password); if ($passwordSuggestions.html() !== result.message) { $passwordSuggestions.html(result.message); } $passwordSuggestions.toggle(result.strength !== 100); $passwordInputParent.find('.js-password-strength__indicator').css('width', result.strength + '%').removeClass('is-weak is-fair is-good is-strong').addClass(result.indicatorClass); $passwordInputParent.find('.js-password-strength__text').html(result.indicatorText); } if ($confirmInput.val()) { passwordCheckMatch($confirmInput.val()); $confirmResult.css({ visibility: 'visible' }); } else { $confirmResult.css({ visibility: 'hidden' }); } }; $passwordInput.on('input', passwordCheck); $confirmInput.on('input', passwordCheck); } } }; Drupal.evaluatePasswordStrength = function (password, translate) { password = password.trim(); var indicatorText = void 0; var indicatorClass = void 0; var weaknesses = 0; var strength = 100; var msg = []; var hasLowercase = /[a-z]/.test(password); var hasUppercase = /[A-Z]/.test(password); var hasNumbers = /[0-9]/.test(password); var hasPunctuation = /[^a-zA-Z0-9]/.test(password); var $usernameBox = $('input.username'); var username = $usernameBox.length > 0 ? $usernameBox.val() : translate.username; if (password.length < 12) { msg.push(translate.tooShort); strength -= (12 - password.length) * 5 + 30; } if (!hasLowercase) { msg.push(translate.addLowerCase); weaknesses++; } if (!hasUppercase) { msg.push(translate.addUpperCase); weaknesses++; } if (!hasNumbers) { msg.push(translate.addNumbers); weaknesses++; } if (!hasPunctuation) { msg.push(translate.addPunctuation); weaknesses++; } switch (weaknesses) { case 1: strength -= 12.5; break; case 2: strength -= 25; break; case 3: strength -= 40; break; case 4: strength -= 40; break; } if (password !== '' && password.toLowerCase() === username.toLowerCase()) { msg.push(translate.sameAsUsername); strength = 5; } if (strength < 60) { indicatorText = translate.weak; indicatorClass = 'is-weak'; } else if (strength < 70) { indicatorText = translate.fair; indicatorClass = 'is-fair'; } else if (strength < 80) { indicatorText = translate.good; indicatorClass = 'is-good'; } else if (strength <= 100) { indicatorText = translate.strong; indicatorClass = 'is-strong'; } msg = translate.hasWeaknesses + ''; return { strength: strength, message: msg, indicatorText: indicatorText, indicatorClass: indicatorClass }; }; })(jQuery, Drupal, drupalSettings);