diff options
Diffstat (limited to 'www/wiki/resources/src/mediawiki.special/mediawiki.special.changecredentials.js')
-rw-r--r-- | www/wiki/resources/src/mediawiki.special/mediawiki.special.changecredentials.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki.special/mediawiki.special.changecredentials.js b/www/wiki/resources/src/mediawiki.special/mediawiki.special.changecredentials.js new file mode 100644 index 00000000..ad8a4f4f --- /dev/null +++ b/www/wiki/resources/src/mediawiki.special/mediawiki.special.changecredentials.js @@ -0,0 +1,55 @@ +/*! + * JavaScript for change credentials form. + */ +( function ( mw, $, OO ) { + mw.hook( 'htmlform.enhance' ).add( function ( $root ) { + var api = new mw.Api(); + + $root.find( '.mw-changecredentials-validate-password.oo-ui-fieldLayout' ).each( function () { + var currentApiPromise, + self = OO.ui.FieldLayout.static.infuse( $( this ) ); + + self.getField().setValidation( function ( password ) { + var d; + + if ( currentApiPromise ) { + currentApiPromise.abort(); + currentApiPromise = undefined; + } + + password = password.trim(); + + if ( password === '' ) { + self.setErrors( [] ); + return true; + } + + d = $.Deferred(); + currentApiPromise = api.post( { + action: 'validatepassword', + password: password, + formatversion: 2, + errorformat: 'html', + errorsuselocal: true, + uselang: mw.config.get( 'wgUserLanguage' ) + } ).done( function ( resp ) { + var pwinfo = resp.validatepassword, + good = pwinfo.validity === 'Good', + errors = []; + + currentApiPromise = undefined; + + if ( !good ) { + pwinfo.validitymessages.map( function ( m ) { + errors.push( new OO.ui.HtmlSnippet( m.html ) ); + } ); + } + self.setErrors( errors ); + d.resolve( good ); + } ).fail( d.reject ); + + return d.promise( { abort: currentApiPromise.abort } ); + } ); + } ); + } ); +}( mediaWiki, jQuery, OO ) ); |