WordPress.org

Make WordPress Core

Ticket #23560: 23560.15.diff

File 23560.15.diff, 6.8 KB (added by celloexpressions, 5 years ago)

focus first input in sidebar, not first focusable element

  • src/wp-includes/css/media-views.css

     
    723723                0 0 0 3px #ccc;
    724724}
    725725
     726.selected.attachment:focus {
     727        -webkit-box-shadow: 0 0 0 1px #fff,
     728         0 0 0 5px #1e8cbe;
     729        box-shadow: 0 0 0 1px #fff,
     730         0 0 0 5px #1e8cbe;
     731}
     732
    726733.attachment-preview {
    727734        position: relative;
    728735        width: 199px;
     
    913920}
    914921
    915922.attachment.details .check,
     923.attachment.selected .check:focus,
    916924.media-grid-view .attachment.selected .check {
    917925        background-color: #1e8cbe;
    918926        -webkit-box-shadow: 0 0 0 1px #fff,
     
    935943}
    936944
    937945.attachment.details .check:hover div,
     946.attachment.selected .check:focus div,
    938947.media-grid-view .attachment.selected .check:hover div {
    939948        background-position: -60px 0;
    940949}
     
    14781487        box-shadow: none;
    14791488}
    14801489
     1490.attachment.selection.selected:focus {
     1491        webkit-box-shadow: 0 0 0 1px #5b9dd9,
     1492         0 0 2px 2px #5b9dd9;
     1493        box-shadow: 0 0 0 1px #5b9dd9,
     1494         0 0 2px 2px #5b9dd9;
     1495        outline: none;
     1496}
     1497
    14811498.attachment.selection.details {
    14821499        -webkit-box-shadow:
    14831500                0 0 0 1px #fff,
  • src/wp-includes/js/media-views.js

     
    758758                                this.frame.content.mode('browse');
    759759                        }
    760760                        this.get('selection').add( attachment );
     761
     762                        // Set focus back to where it goes when an attachment is selected.
     763                        $( '.attachments-browser .attachments .attachment' ).first().focus();
    761764                },
    762765
    763766                /**
     
    32213227                                };
    32223228                        }
    32233229
    3224                         $el.show().focus();
     3230                        $el.show().find( '.media-modal-close' ).focus();
    32253231                        return this.propagate('open');
    32263232                },
    32273233
     
    33023308                        if ( 27 === event.which && this.$el.is(':visible') ) {
    33033309                                this.escape();
    33043310                                event.stopImmediatePropagation();
    3305                         } else {
    3306                                 // Keep focus inside the media modal
    3307                                 this.focusManager;
    33083311                        }
    33093312                }
    33103313        });
     
    44044407                        } else {
    44054408                                this.click();
    44064409                        }
     4410
     4411                        // When selecting a tab along the left side,
     4412                        // focus should be transferred into the main panel
     4413                        $('.media-frame-content input').first().focus();
    44074414                },
    44084415
    44094416                click: function() {
     
    47354742                 */
    47364743                toggleSelectionHandler: function( event ) {
    47374744                        var method;
     4745
     4746                        // Catch arrow events
     4747                        if ( 37 === event.keyCode || 38 === event.keyCode || 39 === event.keyCode || 40 === event.keyCode ) {
     4748                                this.arrowEvent(event);
     4749                                return;
     4750                        }
     4751
    47384752                        // Catch enter and space events
    47394753                        if ( 'keydown' === event.type && 13 !== event.keyCode && 32 !== event.keyCode ) {
    47404754                                return;
     
    47574771                        });
    47584772                },
    47594773                /**
     4774                 * @param {Object} event
     4775                 */
     4776                arrowEvent: function( event ) {
     4777                        var attachment = $('.attachments-browser .attachment'),
     4778                                attachmentsWidth = $('.attachments-browser .attachments').width(),
     4779                                thumbnailWidth = attachment.first().innerWidth() + 16,
     4780                                thumbnailsPerRow = Math.floor(attachmentsWidth/thumbnailWidth),
     4781                                totalThumnails = attachment.length,
     4782                                totalRows = Math.ceil(totalThumnails/thumbnailsPerRow),
     4783                                thisIndex = attachment.filter( ':focus' ).index(),
     4784                                thisIndexAdjusted = thisIndex + 1,
     4785                                thisRow = thisIndexAdjusted <= thumbnailsPerRow ? 1 : Math.ceil(thisIndexAdjusted/thumbnailsPerRow);
     4786
     4787                                // Left arrow
     4788                                if ( 37 === event.keyCode ) {
     4789                                        if ( 0 === thisIndex ) {
     4790                                                return;
     4791                                        }
     4792                                        attachment.eq( thisIndex - 1 ).focus();
     4793                                }
     4794
     4795                                // Up arrow
     4796                                if ( 38 === event.keyCode ) {
     4797                                        if ( 1 === thisRow ) {
     4798                                                return;
     4799                                        }
     4800                                        attachment.eq( thisIndex - thumbnailsPerRow ).focus();
     4801                                }
     4802
     4803                                // Right arrow
     4804                                if ( 39 === event.keyCode ) {
     4805                                        if ( totalThumnails === thisIndex ) {
     4806                                                return;
     4807                                        }
     4808                                        attachment.eq( thisIndex + 1 ).focus();
     4809                                }
     4810
     4811                                // Down arrow
     4812                                if ( 40 === event.keyCode ) {
     4813                                        if ( totalRows === thisRow ) {
     4814                                                return;
     4815                                        }
     4816                                        attachment.eq( thisIndex + thumbnailsPerRow ).focus();
     4817                                }
     4818
     4819                                return false;
     4820                },
     4821                /**
    47604822                 * @param {Object} options
    47614823                 */
    47624824                toggleSelection: function( options ) {
     
    47924854
    47934855                                selection.add( models );
    47944856                                selection.single( model );
     4857
     4858                                // When selecting attachments, focus should be transferred to the right details panel
     4859                                $('.attachment-details input').first().focus();
     4860
    47954861                                return;
    47964862
    47974863                        // If the `method` is set to `toggle`, just flip the selection
     
    47994865                        } else if ( 'toggle' === method ) {
    48004866                                selection[ this.selected() ? 'remove' : 'add' ]( model );
    48014867                                selection.single( model );
     4868
     4869                                if ( this.selected() ) {
     4870                                        // When selecting an attachment, focus should be transferred to the right details panel
     4871                                        $('.attachment-details input').first().focus();
     4872                                }
     4873
    48024874                                return;
    48034875                        }
    48044876
     
    48504922                                return;
    48514923                        }
    48524924
    4853                         this.$el.addClass('selected').attr('aria-checked', true);
     4925                        this.$el.addClass( 'selected' ).attr( 'aria-checked', true )
     4926                                        .find( '.check' ).attr( 'tabindex', '0' );
     4927
     4928                        // When selecting an attachment, focus should be transferred to the right details panel
     4929                        $('.attachment-details input').first().focus();
    48544930                },
    48554931                /**
    48564932                 * @param {Backbone.Model} model
     
    48654941                        if ( ! selection || ( collection && collection !== selection ) ) {
    48664942                                return;
    48674943                        }
    4868                         this.$el.removeClass('selected').attr('aria-checked', false);
     4944                        this.$el.removeClass( 'selected' ).attr( 'aria-checked', false )
     4945                                        .find( '.check' ).attr( 'tabindex', '-1' );
    48694946                },
    48704947                /**
    48714948                 * @param {Backbone.Model} model
     
    50275104                        event.stopPropagation();
    50285105                        if ( selection.where( { id: this.model.get( 'id' ) } ).length ) {
    50295106                                selection.remove( this.model );
     5107                                // Move focus back to the attachment tile (from the check).
     5108                                this.$el.focus();
    50305109                        } else {
    50315110                                selection.add( this.model );
    50325111                        }
     
    62376316                        'click .delete-attachment':       'deleteAttachment',
    62386317                        'click .trash-attachment':        'trashAttachment',
    62396318                        'click .edit-attachment':         'editAttachment',
    6240                         'click .refresh-attachment':      'refreshAttachment'
     6319                        'click .refresh-attachment':      'refreshAttachment',
     6320                        'keydown':                        'toggleSelectionHandler'
    62416321                },
    62426322
    62436323                initialize: function() {
     
    63006380                        this.$el.removeClass('needs-refresh');
    63016381                        event.preventDefault();
    63026382                        this.model.fetch();
     6383                },
     6384                /**
     6385                 * @param {Object} event
     6386                 */
     6387                toggleSelectionHandler: function( event ) {
     6388                        // Reverse tabbing out of the right details panel
     6389                        // should take me back to the item in the list that was being edited.
     6390                        if ( 'keydown' === event.type && 9 === event.keyCode && event.shiftKey && event.target === $( ':tabbable', this.$el ).filter( ':first' )[0] ) {
     6391                                $('.attachments-browser .details').focus();
     6392                                return false;
     6393                        }
    63036394                }
    63046395
    63056396        });