learndash-password-strength-meter.js
3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* global wp, pwsL10n, learndash_password_strength_meter_params */
( function( $ ) {
'use strict';
/**
* Password Strength Meter class.
*/
var learndash_password_strength_meter = {
/**
* Initialize strength meter actions.
*/
init: function() {
$( document.body )
.on(
'keyup change',
'form.ldregister #password',
this.strengthMeter
);
},
/**
* Strength Meter.
*/
strengthMeter: function() {
var wrapper = $( 'form.ldregister' ),
submit = $( 'input[type="submit"]', wrapper ),
field = $( '#password', wrapper ),
strength = 1,
fieldValue = field.val();
learndash_password_strength_meter.includeMeter( wrapper, field );
strength = learndash_password_strength_meter.checkPasswordStrength( wrapper, field );
if (
fieldValue.length > 0 &&
strength < learndash_password_strength_meter_params.min_password_strength &&
-1 !== strength &&
learndash_password_strength_meter_params.stop_register
) {
submit.attr( 'disabled', 'disabled' ).addClass( 'disabled' );
} else {
submit.prop( 'disabled', false ).removeClass( 'disabled' );
}
},
/**
* Include meter HTML.
*
* @param {Object} wrapper
* @param {Object} field
*/
includeMeter: function( wrapper, field ) {
var meter = wrapper.find( '.learndash-password-strength' );
if ( '' === field.val() ) {
meter.hide();
$( document.body ).trigger( 'learndash-password-strength-hide' );
} else if ( 0 === meter.length ) {
field.after( '<div class="learndash-password-strength" aria-live="polite"></div>' );
$( document.body ).trigger( 'learndash-password-strength-added' );
} else {
meter.show();
$( document.body ).trigger( 'learndash-password-strength-show' );
}
},
/**
* Check password strength.
*
* @param wrapper
* @param {Object} field
*
* @return {Int}
*/
checkPasswordStrength: function( wrapper, field ) {
var meter = wrapper.find( '.learndash-password-strength' ),
hint = wrapper.find( '.learndash-password-hint' ),
hint_html = '<small class="learndash-password-hint">' + learndash_password_strength_meter_params.i18n_password_hint + '</small>',
strength = wp.passwordStrength.meter( field.val(), wp.passwordStrength.userInputDisallowedList() ),
error = '';
// Reset.
meter.removeClass( 'short bad good strong' );
hint.remove();
if ( meter.is( ':hidden' ) ) {
return strength;
}
// Error to append
if ( strength < learndash_password_strength_meter_params.min_password_strength ) {
error = ' - ' + learndash_password_strength_meter_params.i18n_password_error;
}
switch ( strength ) {
case 0 :
meter.addClass( 'short' ).html( pwsL10n.short + error );
meter.after( hint_html );
break;
case 1 :
meter.addClass( 'bad' ).html( pwsL10n.bad + error );
meter.after( hint_html );
break;
case 2 :
meter.addClass( 'bad' ).html( pwsL10n.bad + error );
meter.after( hint_html );
break;
case 3 :
meter.addClass( 'good' ).html( pwsL10n.good + error );
break;
case 4 :
meter.addClass( 'strong' ).html( pwsL10n.strong + error );
break;
case 5 :
meter.addClass( 'short' ).html( pwsL10n.mismatch );
break;
}
return strength;
},
};
learndash_password_strength_meter.init();
}( jQuery ) );