summaryrefslogtreecommitdiff
path: root/www/wiki/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js')
-rw-r--r--www/wiki/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js b/www/wiki/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
new file mode 100644
index 00000000..8a61afbe
--- /dev/null
+++ b/www/wiki/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
@@ -0,0 +1,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 ) );