diff --git a/core/modules/user/user.js b/core/modules/user/user.js
index 45f554c..490d14d 100644
--- a/core/modules/user/user.js
+++ b/core/modules/user/user.js
@@ -1,4 +1,4 @@
-(function ($) {
+(function ($, Drupal, drupalSettings) {
"use strict";
@@ -8,37 +8,43 @@
*/
Drupal.behaviors.password = {
attach: function (context, settings) {
- var translate = settings.password;
- $(context).find('input.password-field').once('password').each(function () {
- var passwordInput = $(this);
- var innerWrapper = $(this).parent();
- var outerWrapper = $(this).parent().parent();
- var passwordDescription;
+ var $passwordInput = $(context).find('input.password-field').once('password');
+
+ if ($passwordInput.length) {
+ var translate = settings.password;
+
+ var $passwordInputParent = $passwordInput.parent();
+ var $passwordInputParentWrapper = $passwordInputParent.parent();
// Add identifying class to password element parent.
- innerWrapper.addClass('password-parent');
+ $passwordInputParent.addClass('password-parent');
// Add the password confirmation layer.
- outerWrapper.find('input.password-confirm').parent().append('
' + translate.confirmTitle + '
').addClass('confirm-parent');
- var confirmInput = outerWrapper.find('input.password-confirm');
- var confirmResult = outerWrapper.find('div.password-confirm-match');
- var confirmChild = confirmResult.find('span');
+ $passwordInputParentWrapper
+ .find('input.password-confirm')
+ .parent()
+ .append('' + translate.confirmTitle + '
')
+ .addClass('confirm-parent');
+
+ var $confirmInput = $passwordInputParentWrapper.find('input.password-confirm');
+ var $confirmResult = $passwordInputParentWrapper.find('div.password-confirm');
+ var $confirmChild = $confirmResult.find('span');
// If the password strength indicator is enabled, add its markup.
if (settings.password.showStrengthIndicator) {
var passwordMeter = '' + translate.strengthTitle + '
';
- confirmInput.parent().after('');
- innerWrapper.append(passwordMeter);
- passwordDescription = outerWrapper.find('div.password-suggestions').hide();
+ $confirmInput.parent().after('');
+ $passwordInputParent.append(passwordMeter);
+ var $passwordSuggestions = $passwordInputParentWrapper.find('div.password-suggestions').hide();
}
// Check that password and confirmation inputs match.
var passwordCheckMatch = function (confirmInputVal) {
- var success = passwordInput.val() === confirmInputVal;
+ var success = $passwordInput.val() === confirmInputVal;
var confirmClass = success ? 'ok' : 'error';
// Fill in the success message and set the class accordingly.
- confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')])
+ $confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')])
.removeClass('ok error').addClass(confirmClass);
};
@@ -46,40 +52,40 @@
var passwordCheck = function () {
if (settings.password.showStrengthIndicator) {
// Evaluate the password strength.
- var result = Drupal.evaluatePasswordStrength(passwordInput.val(), settings.password);
+ var result = Drupal.evaluatePasswordStrength($passwordInput.val(), settings.password);
// Update the suggestions for how to improve the password.
- if (passwordDescription.html() !== result.message) {
- passwordDescription.html(result.message);
+ if ($passwordSuggestions.html() !== result.message) {
+ $passwordSuggestions.html(result.message);
}
// Only show the description box if a weakness exists in the password.
- passwordDescription.toggle(result.strength !== 100);
+ $passwordSuggestions.toggle(result.strength !== 100);
// Adjust the length of the strength indicator.
- innerWrapper.find('.password-strength__indicator')
+ $passwordInputParent.find('.indicator')
.css('width', result.strength + '%')
.removeClass('is-weak is-fair is-good is-strong')
.addClass(result.indicatorClass);
// Update the strength indication text.
- innerWrapper.find('.password-strength__text').html(result.indicatorText);
+ $passwordInputParent.find('.password-strength-text').html(result.indicatorText);
}
// Check the value in the confirm input and show results.
- if (confirmInput.val()) {
- passwordCheckMatch(confirmInput.val());
- confirmResult.css({visibility: 'visible'});
+ if ($confirmInput.val()) {
+ passwordCheckMatch($confirmInput.val());
+ $confirmResult.css({ visibility: 'visible' });
}
else {
- confirmResult.css({visibility: 'hidden'});
+ $confirmResult.css({ visibility: 'hidden' });
}
};
// Monitor input events.
- passwordInput.on('input', passwordCheck);
- confirmInput.on('input', passwordCheck);
- });
+ $passwordInput.on('input', passwordCheck);
+ $confirmInput.on('input', passwordCheck);
+ }
}
};
@@ -91,15 +97,15 @@
Drupal.evaluatePasswordStrength = function (password, translate) {
var indicatorText, indicatorClass, weaknesses = 0, strength = 100, 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 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);
// If there is a username edit box on the page, compare password to that, otherwise
// use value from the database.
- var usernameBox = $('input.username');
- var username = (usernameBox.length > 0) ? usernameBox.val() : translate.username;
+ var $usernameInput = $('input.username');
+ var username = ($usernameInput.length > 0) ? $usernameInput.val() : translate.username;
// Lose 5 points for every character less than 6, plus a 30 point penalty.
if (password.length < 6) {
@@ -171,8 +177,14 @@
// Assemble the final message.
msg = translate.hasWeaknesses + '';
- return {strength: strength, message: msg, indicatorText: indicatorText, indicatorClass: indicatorClass};
+
+ return {
+ strength: strength,
+ message: msg,
+ indicatorText: indicatorText,
+ indicatorColor: indicatorColor
+ };
};
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/user/user.permissions.js b/core/modules/user/user.permissions.js
index d47ee9a..068e2aa 100644
--- a/core/modules/user/user.permissions.js
+++ b/core/modules/user/user.permissions.js
@@ -8,16 +8,16 @@
Drupal.behaviors.permissions = {
attach: function (context) {
var self = this;
- $('table#permissions').once('permissions').each(function () {
+ var $table = $('#permissions').once('permissions');
+if($table.length) {
// On a site with many roles and permissions, this behavior initially has
// to perform thousands of DOM manipulations to inject checkboxes and hide
// them. By detaching the table from the DOM, all operations can be
// performed without triggering internal layout and re-rendering processes
// in the browser.
- var $table = $(this);
- var $ancestor, method;
- if ($table.prev().length) {
- $ancestor = $table.prev();
+ var method;
+ var $ancestor = $table.prev();
+ if ($ancestor.length) {
method = 'after';
}
else {
@@ -35,9 +35,11 @@
.attr('title', Drupal.t("This permission is inherited from the authenticated user role."))
.hide();
- $table.find('input[type=checkbox]').not('.rid-anonymous, .rid-authenticated').addClass('real-checkbox').each(function () {
- $dummy.clone().insertAfter(this);
- });
+ $table
+ .find('input[type="checkbox"]')
+ .not('.rid-anonymous, .rid-authenticated')
+ .addClass('real-checkbox')
+ .after($dummy);
// Initialize the authenticated user checkbox.
$table.find('input[type=checkbox].rid-authenticated')
@@ -48,7 +50,7 @@
// Re-insert the table into the DOM.
$ancestor[method]($table);
- });
+ }
},
/**