@@ -182,14 +182,36 @@ public function user_options( $user ) {
182182 </p>
183183 </div>
184184 <div class="two-factor-backup-codes-wrapper" style="display:none;">
185- <ol class="two-factor-backup-codes-unused-codes"></ol>
185+ <div class="two-factor-backup-codes-list-wrap">
186+ <ol class="two-factor-backup-codes-unused-codes"></ol>
187+ </div>
186188 <p class="description"><?php esc_html_e ( 'Write these down! Once you navigate away from this page, you will not be able to view these codes again. ' , 'two-factor ' ); ?> </p>
187189 <p>
190+ <a class="button button-two-factor-backup-codes-copy button-secondary hide-if-no-js" href="javascript:void(0);" id="two-factor-backup-codes-copy-link"><?php esc_html_e ( 'Copy Codes ' , 'two-factor ' ); ?> </a>
188191 <a class="button button-two-factor-backup-codes-download button-secondary hide-if-no-js" href="javascript:void(0);" id="two-factor-backup-codes-download-link" download="two-factor-backup-codes.txt"><?php esc_html_e ( 'Download Codes ' , 'two-factor ' ); ?> </a>
189192 </p>
190193 </div>
191194 <script>
192195 ( function( $ ) {
196+ $( '.button-two-factor-backup-codes-copy' ).click( function() {
197+ var csvCodes = $( '.two-factor-backup-codes-wrapper' ).data( 'codesCsv' );
198+
199+ if ( ! csvCodes ) {
200+ return;
201+ }
202+
203+ if ( navigator.clipboard && navigator.clipboard.writeText ) {
204+ navigator.clipboard.writeText( csvCodes );
205+ return;
206+ }
207+
208+ var $temp = $( '<textarea>' ).val( csvCodes ).css( { position: 'absolute', left: '-9999px' } );
209+ $( 'body' ).append( $temp );
210+ $temp[0].select();
211+ document.execCommand( 'copy' );
212+ $temp.remove();
213+ } );
214+
193215 $( '.button-two-factor-backup-codes-generate' ).click( function() {
194216 wp.apiRequest( {
195217 method: 'POST',
@@ -202,10 +224,12 @@ public function user_options( $user ) {
202224
203225 $( '.two-factor-backup-codes-wrapper' ).show();
204226 $codesList.html( '' );
227+ $codesList.css( { 'column-count': 2, 'column-gap': '80px', 'max-width': '420px' } );
228+ $( '.two-factor-backup-codes-wrapper' ).data( 'codesCsv', response.codes.join( ',' ) );
205229
206230 // Append the codes.
207231 for ( var i = 0; i < response.codes.length; i++ ) {
208- $codesList.append( '<li>' + response.codes[ i ] + '</li>' );
232+ $codesList.append( '<li class="two-factor-backup-codes-token" >' + response.codes[ i ] + '</li>' );
209233 }
210234
211235 // Update counter.
0 commit comments