WordPress.org

Make WordPress Core

Ticket #22659: 22659.2.diff

File 22659.2.diff, 2.5 KB (added by koopersmith, 5 years ago)
  • wp-includes/js/media-views.js

     
    19911991                }
    19921992        });
    19931993
     1994        // wp.media.view.FocusManager
     1995        // ----------------------------
     1996        media.view.FocusManager = media.View.extend({
     1997                events: {
     1998                        keydown: 'recordTab',
     1999                        focusin: 'updateIndex'
     2000                },
     2001
     2002                focus: function() {
     2003                        if ( _.isUndefined( this.index ) )
     2004                                return;
     2005
     2006                        // Update our collection of `$tabbables`.
     2007                        this.$tabbables = this.$(':tabbable');
     2008
     2009                        // If tab is saved, focus it.
     2010                        this.$tabbables.eq( this.index ).focus();
     2011                },
     2012
     2013                recordTab: function( event ) {
     2014                        // Look for the tab key.
     2015                        if ( 9 !== event.keyCode )
     2016                                return;
     2017
     2018                        // First try to update the index.
     2019                        if ( _.isUndefined( this.index ) )
     2020                                this.updateIndex( event );
     2021
     2022                        // If we still don't have an index, bail.
     2023                        if ( _.isUndefined( this.index ) )
     2024                                return;
     2025
     2026                        var index = this.index + ( event.shiftKey ? -1 : 1 );
     2027
     2028                        if ( index >= 0 && index < this.$tabbables.length )
     2029                                this.index = index;
     2030                        else
     2031                                delete this.index;
     2032                },
     2033
     2034                updateIndex: function( event ) {
     2035                        this.$tabbables = this.$(':tabbable');
     2036
     2037                        var index = this.$tabbables.index( event.target );
     2038
     2039                        if ( -1 === index )
     2040                                delete this.index;
     2041                        else
     2042                                this.index = index;
     2043                }
     2044        });
     2045
    19942046        // wp.media.view.UploaderWindow
    19952047        // ----------------------------
    19962048        media.view.UploaderWindow = media.View.extend({
     
    28322884                        this.updateSave();
    28332885
    28342886                        this.views.render();
     2887
    28352888                        return this;
    28362889                },
    28372890
     
    39514004                        'click .delete-attachment':       'deleteAttachment'
    39524005                },
    39534006
     4007                initialize: function() {
     4008                        this.focusManager = new media.view.FocusManager({
     4009                                el: this.el
     4010                        });
     4011
     4012                        media.view.Attachment.prototype.initialize.apply( this, arguments );
     4013                },
     4014
     4015                render: function() {
     4016                        media.view.Attachment.prototype.render.apply( this, arguments );
     4017                        this.focusManager.focus();
     4018                        return this;
     4019                },
     4020
    39544021                deleteAttachment: function(event) {
    39554022                        event.preventDefault();
    39564023
     
    39744041                },
    39754042
    39764043                initialize: function() {
     4044                        this.focusManager = new media.view.FocusManager({
     4045                                el: this.el
     4046                        });
     4047
    39774048                        this.model.on( 'change:compat', this.render, this );
    39784049                },
    39794050
     
    39824053                        if ( ! compat || ! compat.item )
    39834054                                return;
    39844055
     4056                        this.views.detach();
    39854057                        this.$el.html( compat.item );
     4058                        this.views.render();
     4059
     4060                        this.focusManager.focus();
    39864061                        return this;
    39874062                },
    39884063