diff options
Diffstat (limited to 'resources/mediawiki.special/mediawiki.special.createAccount.js')
-rw-r--r-- | resources/mediawiki.special/mediawiki.special.createAccount.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/resources/mediawiki.special/mediawiki.special.createAccount.js b/resources/mediawiki.special/mediawiki.special.createAccount.js new file mode 100644 index 00000000..5cbb1ee0 --- /dev/null +++ b/resources/mediawiki.special/mediawiki.special.createAccount.js @@ -0,0 +1,112 @@ +/** + * JavaScript for Create account form (Special:UserLogin?type=signup). + */ +( function ( mw, $ ) { + + // When sending password by email, hide the password input fields. + // This function doesn't need to be loaded early by ResourceLoader, but is tiny. + function hidePasswordOnEmail() { + // 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(); + } + + // Move the FancyCaptcha image into a more attractive container. + // This function does need to be run early by ResourceLoader. + function adjustFancyCaptcha() { + var $content = $( '#mw-content-text' ), + $submit = $content.find( '#wpCreateaccount' ), + tabIndex, + $captchaStuff, + $captchaImageContainer, + // JavaScript can't yet parse the message createacct-imgcaptcha-help when it + // contains a MediaWiki transclusion, so PHP parses it and sends the HTML. + helpMsg = mw.config.get( 'wgCreateacctImgcaptchaHelp' ), + helpHtml = ''; + + /* + * CAPTCHA + * The CAPTCHA is in a div style="captcha" at the top of the form. + * If it's a FancyCaptcha, then we remove it and insert it lower down, + * in a customized div with just what we need (e.g. no + * fancycaptcha-createaccount message). + */ + if ( !$submit.length) { + return; + } + tabIndex = $submit.prop( 'tabindex' ) - 1; + $captchaStuff = $content.find ( '.captcha' ); + + if ( $captchaStuff.length ) { + + // The FancyCaptcha has this class in the ConfirmEdit extension + // after 2013-04-18. + $captchaImageContainer = $captchaStuff.find( '.fancycaptcha-image-container' ); + if ( $captchaImageContainer.length !== 1 ) { + return; + } + + $captchaStuff.remove(); + + if ( helpMsg) { + helpHtml = '<small class="mw-createacct-captcha-assisted">' + helpMsg + '</small>'; + } + + // Insert another div before the submit button that will include the + // repositioned FancyCaptcha div, an input field, and possible help. + $submit.closest( 'div' ) + .before( [ + '<div>', + '<label for="wpCaptchaWord">' + mw.message( 'createacct-captcha' ).escaped() + '</label>', + '<div class="mw-createacct-captcha-container">', + '<div class="mw-createacct-captcha-and-reload" />', + '<input id="wpCaptchaWord" name="wpCaptchaWord" type="text" placeholder="' + + mw.message( 'createacct-imgcaptcha-ph' ).escaped() + + '" tabindex="' + tabIndex + '" autocapitalize="off" autocorrect="off">', + helpHtml, + '</div>', + '</div>' + ].join( '' ) + ); + + // Stick the FancyCaptcha container inside our bordered and framed parents. + $captchaImageContainer + .prependTo( $content.find( '.mw-createacct-captcha-and-reload' ) ); + + // Find the input field, add the text (if any) of the existing CAPTCHA + // field (although usually it's blanked out on every redisplay), + // and after it move over the hidden field that tells the CAPTCHA + // what to do. + $content.find( '#wpCaptchaWord' ) + .val( $captchaStuff.find( '#wpCaptchaWord' ).val() ) + .after( $captchaStuff.find( '#wpCaptchaId' ) ); + } + } + + $( function () { + adjustFancyCaptcha(); + hidePasswordOnEmail(); + } ); + +}( mediaWiki, jQuery ) ); |