| | |
| | |
| | |
| |
|
| | ( function( $ ) { |
| | var $appPassSection = $( '#application-passwords-section' ), |
| | $newAppPassForm = $appPassSection.find( '.create-application-password' ), |
| | $newAppPassField = $newAppPassForm.find( '.input' ), |
| | $newAppPassButton = $newAppPassForm.find( '.button' ), |
| | $appPassTwrapper = $appPassSection.find( '.application-passwords-list-table-wrapper' ), |
| | $appPassTbody = $appPassSection.find( 'tbody' ), |
| | $appPassTrNoItems = $appPassTbody.find( '.no-items' ), |
| | $removeAllBtn = $( '#revoke-all-application-passwords' ), |
| | tmplNewAppPass = wp.template( 'new-application-password' ), |
| | tmplAppPassRow = wp.template( 'application-password-row' ), |
| | userId = $( '#user_id' ).val(); |
| |
|
| | $newAppPassButton.on( 'click', function( e ) { |
| | e.preventDefault(); |
| |
|
| | if ( $newAppPassButton.prop( 'aria-disabled' ) ) { |
| | return; |
| | } |
| |
|
| | var name = $newAppPassField.val(); |
| |
|
| | if ( 0 === name.length ) { |
| | $newAppPassField.trigger( 'focus' ); |
| | return; |
| | } |
| |
|
| | clearNotices(); |
| | $newAppPassButton.prop( 'aria-disabled', true ).addClass( 'disabled' ); |
| |
|
| | var request = { |
| | name: name |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | request = wp.hooks.applyFilters( 'wp_application_passwords_new_password_request', request, userId ); |
| |
|
| | wp.apiRequest( { |
| | path: '/wp/v2/users/' + userId + '/application-passwords?_locale=user', |
| | method: 'POST', |
| | data: request |
| | } ).always( function() { |
| | $newAppPassButton.removeProp( 'aria-disabled' ).removeClass( 'disabled' ); |
| | } ).done( function( response ) { |
| | $newAppPassField.val( '' ); |
| | $newAppPassButton.prop( 'disabled', false ); |
| |
|
| | $newAppPassForm.after( tmplNewAppPass( { |
| | name: response.name, |
| | password: response.password |
| | } ) ); |
| | $( '.new-application-password-notice' ).attr( 'tabindex', '-1' ).trigger( 'focus' ); |
| |
|
| | $appPassTbody.prepend( tmplAppPassRow( response ) ); |
| |
|
| | $appPassTwrapper.show(); |
| | $appPassTrNoItems.remove(); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | wp.hooks.doAction( 'wp_application_passwords_created_password', response, request ); |
| | } ).fail( handleErrorResponse ); |
| | } ); |
| |
|
| | $appPassTbody.on( 'click', '.delete', function( e ) { |
| | e.preventDefault(); |
| |
|
| | if ( ! window.confirm( wp.i18n.__( 'Are you sure you want to revoke this password? This action cannot be undone.' ) ) ) { |
| | return; |
| | } |
| |
|
| | var $submitButton = $( this ), |
| | $tr = $submitButton.closest( 'tr' ), |
| | uuid = $tr.data( 'uuid' ); |
| |
|
| | clearNotices(); |
| | $submitButton.prop( 'disabled', true ); |
| |
|
| | wp.apiRequest( { |
| | path: '/wp/v2/users/' + userId + '/application-passwords/' + uuid + '?_locale=user', |
| | method: 'DELETE' |
| | } ).always( function() { |
| | $submitButton.prop( 'disabled', false ); |
| | } ).done( function( response ) { |
| | if ( response.deleted ) { |
| | if ( 0 === $tr.siblings().length ) { |
| | $appPassTwrapper.hide(); |
| | } |
| | $tr.remove(); |
| |
|
| | addNotice( wp.i18n.__( 'Application password revoked.' ), 'success' ).trigger( 'focus' ); |
| | } |
| | } ).fail( handleErrorResponse ); |
| | } ); |
| |
|
| | $removeAllBtn.on( 'click', function( e ) { |
| | e.preventDefault(); |
| |
|
| | if ( ! window.confirm( wp.i18n.__( 'Are you sure you want to revoke all passwords? This action cannot be undone.' ) ) ) { |
| | return; |
| | } |
| |
|
| | var $submitButton = $( this ); |
| |
|
| | clearNotices(); |
| | $submitButton.prop( 'disabled', true ); |
| |
|
| | wp.apiRequest( { |
| | path: '/wp/v2/users/' + userId + '/application-passwords?_locale=user', |
| | method: 'DELETE' |
| | } ).always( function() { |
| | $submitButton.prop( 'disabled', false ); |
| | } ).done( function( response ) { |
| | if ( response.deleted ) { |
| | $appPassTbody.children().remove(); |
| | $appPassSection.children( '.new-application-password' ).remove(); |
| | $appPassTwrapper.hide(); |
| |
|
| | addNotice( wp.i18n.__( 'All application passwords revoked.' ), 'success' ).trigger( 'focus' ); |
| | } |
| | } ).fail( handleErrorResponse ); |
| | } ); |
| |
|
| | $appPassSection.on( 'click', '.notice-dismiss', function( e ) { |
| | e.preventDefault(); |
| | var $el = $( this ).parent(); |
| | $el.removeAttr( 'role' ); |
| | $el.fadeTo( 100, 0, function () { |
| | $el.slideUp( 100, function () { |
| | $el.remove(); |
| | $newAppPassField.trigger( 'focus' ); |
| | } ); |
| | } ); |
| | } ); |
| |
|
| | $newAppPassField.on( 'keypress', function ( e ) { |
| | if ( 13 === e.which ) { |
| | e.preventDefault(); |
| | $newAppPassButton.trigger( 'click' ); |
| | } |
| | } ); |
| |
|
| | |
| | if ( 0 === $appPassTbody.children( 'tr' ).not( $appPassTrNoItems ).length ) { |
| | $appPassTwrapper.hide(); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | function handleErrorResponse( xhr, textStatus, errorThrown ) { |
| | var errorMessage = errorThrown; |
| |
|
| | if ( xhr.responseJSON && xhr.responseJSON.message ) { |
| | errorMessage = xhr.responseJSON.message; |
| | } |
| |
|
| | addNotice( errorMessage, 'error' ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | function addNotice( message, type ) { |
| | var $notice = $( '<div></div>' ) |
| | .attr( 'role', 'alert' ) |
| | .attr( 'tabindex', '-1' ) |
| | .addClass( 'is-dismissible notice notice-' + type ) |
| | .append( $( '<p></p>' ).text( message ) ) |
| | .append( |
| | $( '<button></button>' ) |
| | .attr( 'type', 'button' ) |
| | .addClass( 'notice-dismiss' ) |
| | .append( $( '<span></span>' ).addClass( 'screen-reader-text' ).text( wp.i18n.__( 'Dismiss this notice.' ) ) ) |
| | ); |
| |
|
| | $newAppPassForm.after( $notice ); |
| |
|
| | return $notice; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | function clearNotices() { |
| | $( '.notice', $appPassSection ).remove(); |
| | } |
| | }( jQuery ) ); |
| |
|