Mercurial > hg > isophonics-drupal-site
comparison core/modules/user/user.js @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 /** | |
2 * DO NOT EDIT THIS FILE. | |
3 * See the following change record for more information, | |
4 * https://www.drupal.org/node/2815083 | |
5 * @preserve | |
6 **/ | |
7 | |
8 (function ($, Drupal, drupalSettings) { | |
9 Drupal.behaviors.password = { | |
10 attach: function attach(context, settings) { | |
11 var $passwordInput = $(context).find('input.js-password-field').once('password'); | |
12 | |
13 if ($passwordInput.length) { | |
14 var translate = settings.password; | |
15 | |
16 var $passwordInputParent = $passwordInput.parent(); | |
17 var $passwordInputParentWrapper = $passwordInputParent.parent(); | |
18 var $passwordSuggestions = void 0; | |
19 | |
20 $passwordInputParent.addClass('password-parent'); | |
21 | |
22 $passwordInputParentWrapper.find('input.js-password-confirm').parent().append('<div aria-live="polite" aria-atomic="true" class="password-confirm js-password-confirm">' + translate.confirmTitle + ' <span></span></div>').addClass('confirm-parent'); | |
23 | |
24 var $confirmInput = $passwordInputParentWrapper.find('input.js-password-confirm'); | |
25 var $confirmResult = $passwordInputParentWrapper.find('div.js-password-confirm'); | |
26 var $confirmChild = $confirmResult.find('span'); | |
27 | |
28 if (settings.password.showStrengthIndicator) { | |
29 var passwordMeter = '<div class="password-strength"><div class="password-strength__meter"><div class="password-strength__indicator js-password-strength__indicator"></div></div><div aria-live="polite" aria-atomic="true" class="password-strength__title">' + translate.strengthTitle + ' <span class="password-strength__text js-password-strength__text"></span></div></div>'; | |
30 $confirmInput.parent().after('<div class="password-suggestions description"></div>'); | |
31 $passwordInputParent.append(passwordMeter); | |
32 $passwordSuggestions = $passwordInputParentWrapper.find('div.password-suggestions').hide(); | |
33 } | |
34 | |
35 var passwordCheckMatch = function passwordCheckMatch(confirmInputVal) { | |
36 var success = $passwordInput.val() === confirmInputVal; | |
37 var confirmClass = success ? 'ok' : 'error'; | |
38 | |
39 $confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')]).removeClass('ok error').addClass(confirmClass); | |
40 }; | |
41 | |
42 var passwordCheck = function passwordCheck() { | |
43 if (settings.password.showStrengthIndicator) { | |
44 var result = Drupal.evaluatePasswordStrength($passwordInput.val(), settings.password); | |
45 | |
46 if ($passwordSuggestions.html() !== result.message) { | |
47 $passwordSuggestions.html(result.message); | |
48 } | |
49 | |
50 $passwordSuggestions.toggle(result.strength !== 100); | |
51 | |
52 $passwordInputParent.find('.js-password-strength__indicator').css('width', result.strength + '%').removeClass('is-weak is-fair is-good is-strong').addClass(result.indicatorClass); | |
53 | |
54 $passwordInputParent.find('.js-password-strength__text').html(result.indicatorText); | |
55 } | |
56 | |
57 if ($confirmInput.val()) { | |
58 passwordCheckMatch($confirmInput.val()); | |
59 $confirmResult.css({ visibility: 'visible' }); | |
60 } else { | |
61 $confirmResult.css({ visibility: 'hidden' }); | |
62 } | |
63 }; | |
64 | |
65 $passwordInput.on('input', passwordCheck); | |
66 $confirmInput.on('input', passwordCheck); | |
67 } | |
68 } | |
69 }; | |
70 | |
71 Drupal.evaluatePasswordStrength = function (password, translate) { | |
72 password = password.trim(); | |
73 var indicatorText = void 0; | |
74 var indicatorClass = void 0; | |
75 var weaknesses = 0; | |
76 var strength = 100; | |
77 var msg = []; | |
78 | |
79 var hasLowercase = /[a-z]/.test(password); | |
80 var hasUppercase = /[A-Z]/.test(password); | |
81 var hasNumbers = /[0-9]/.test(password); | |
82 var hasPunctuation = /[^a-zA-Z0-9]/.test(password); | |
83 | |
84 var $usernameBox = $('input.username'); | |
85 var username = $usernameBox.length > 0 ? $usernameBox.val() : translate.username; | |
86 | |
87 if (password.length < 12) { | |
88 msg.push(translate.tooShort); | |
89 strength -= (12 - password.length) * 5 + 30; | |
90 } | |
91 | |
92 if (!hasLowercase) { | |
93 msg.push(translate.addLowerCase); | |
94 weaknesses++; | |
95 } | |
96 if (!hasUppercase) { | |
97 msg.push(translate.addUpperCase); | |
98 weaknesses++; | |
99 } | |
100 if (!hasNumbers) { | |
101 msg.push(translate.addNumbers); | |
102 weaknesses++; | |
103 } | |
104 if (!hasPunctuation) { | |
105 msg.push(translate.addPunctuation); | |
106 weaknesses++; | |
107 } | |
108 | |
109 switch (weaknesses) { | |
110 case 1: | |
111 strength -= 12.5; | |
112 break; | |
113 | |
114 case 2: | |
115 strength -= 25; | |
116 break; | |
117 | |
118 case 3: | |
119 strength -= 40; | |
120 break; | |
121 | |
122 case 4: | |
123 strength -= 40; | |
124 break; | |
125 } | |
126 | |
127 if (password !== '' && password.toLowerCase() === username.toLowerCase()) { | |
128 msg.push(translate.sameAsUsername); | |
129 | |
130 strength = 5; | |
131 } | |
132 | |
133 if (strength < 60) { | |
134 indicatorText = translate.weak; | |
135 indicatorClass = 'is-weak'; | |
136 } else if (strength < 70) { | |
137 indicatorText = translate.fair; | |
138 indicatorClass = 'is-fair'; | |
139 } else if (strength < 80) { | |
140 indicatorText = translate.good; | |
141 indicatorClass = 'is-good'; | |
142 } else if (strength <= 100) { | |
143 indicatorText = translate.strong; | |
144 indicatorClass = 'is-strong'; | |
145 } | |
146 | |
147 msg = translate.hasWeaknesses + '<ul><li>' + msg.join('</li><li>') + '</li></ul>'; | |
148 | |
149 return { | |
150 strength: strength, | |
151 message: msg, | |
152 indicatorText: indicatorText, | |
153 indicatorClass: indicatorClass | |
154 }; | |
155 }; | |
156 })(jQuery, Drupal, drupalSettings); |