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
|
/*!
* JavaScript for signup form.
*/
( function ( mw, $ ) {
// When sending password by email, hide the password input fields.
$( function () {
// Always required if checked, otherwise it depends, so we use the original
var $emailLabel = $( 'label[for="wpEmail"]' ),
originalText = $emailLabel.text(),
requiredText = mw.message( 'createacct-emailrequired' ).text(),
$createByMailCheckbox = $( '#wpCreateaccountMail' ),
$beforePwds = $( '.mw-row-password:first' ).prev(),
$pwds;
function updateForCheckbox() {
var checked = $createByMailCheckbox.prop( 'checked' );
if ( checked ) {
$pwds = $( '.mw-row-password' ).detach();
$emailLabel.text( requiredText );
} else {
if ( $pwds ) {
$beforePwds.after( $pwds );
$pwds = null;
}
$emailLabel.text( originalText );
}
}
$createByMailCheckbox.on( 'change', updateForCheckbox );
updateForCheckbox();
} );
// Check if the username is invalid or already taken
mw.hook( 'htmlform.enhance' ).add( function ( $root ) {
var $usernameInput = $root.find( '#wpName2' ),
$passwordInput = $root.find( '#wpPassword2' ),
$emailInput = $root.find( '#wpEmail' ),
$realNameInput = $root.find( '#wpRealName' ),
api = new mw.Api(),
usernameChecker, passwordChecker;
function checkUsername( username ) {
// We could just use .then() if we didn't have to pass on .abort()…
var d, apiPromise;
d = $.Deferred();
apiPromise = api.get( {
action: 'query',
list: 'users',
ususers: username,
usprop: 'cancreate',
formatversion: 2,
errorformat: 'html',
errorsuselocal: true,
uselang: mw.config.get( 'wgUserLanguage' )
} )
.done( function ( resp ) {
var userinfo = resp.query.users[ 0 ];
if ( resp.query.users.length !== 1 || userinfo.invalid ) {
d.resolve( { valid: false, messages: [ mw.message( 'noname' ).parseDom() ] } );
} else if ( userinfo.userid !== undefined ) {
d.resolve( { valid: false, messages: [ mw.message( 'userexists' ).parseDom() ] } );
} else if ( !userinfo.cancreate ) {
d.resolve( {
valid: false,
messages: userinfo.cancreateerror ? userinfo.cancreateerror.map( function ( m ) {
return m.html;
} ) : []
} );
} else {
d.resolve( { valid: true, messages: [] } );
}
} )
.fail( d.reject );
return d.promise( { abort: apiPromise.abort } );
}
function checkPassword() {
// We could just use .then() if we didn't have to pass on .abort()…
var apiPromise,
d = $.Deferred();
if ( $usernameInput.val().trim() === '' ) {
d.resolve( { valid: true, messages: [] } );
return d.promise();
}
apiPromise = api.post( {
action: 'validatepassword',
user: $usernameInput.val(),
password: $passwordInput.val(),
email: $emailInput.val() || '',
realname: $realNameInput.val() || '',
formatversion: 2,
errorformat: 'html',
errorsuselocal: true,
uselang: mw.config.get( 'wgUserLanguage' )
} )
.done( function ( resp ) {
var pwinfo = resp.validatepassword || {};
d.resolve( {
valid: pwinfo.validity === 'Good',
messages: pwinfo.validitymessages ? pwinfo.validitymessages.map( function ( m ) {
return m.html;
} ) : []
} );
} )
.fail( d.reject );
return d.promise( { abort: apiPromise.abort } );
}
usernameChecker = new mw.htmlform.Checker( $usernameInput, checkUsername );
usernameChecker.attach();
passwordChecker = new mw.htmlform.Checker( $passwordInput, checkPassword );
passwordChecker.attach( $usernameInput.add( $emailInput ).add( $realNameInput ) );
} );
}( mediaWiki, jQuery ) );
|