WordPress.org

Make WordPress Core

Ticket #24716: 24716.26.diff

File 24716.26.diff, 5.8 KB (added by adamsilverstein, 4 years ago)

remove unused handler

  • src/wp-admin/upload.php

     
    2424        wp_enqueue_media();
    2525        wp_enqueue_script( 'media-grid' );
    2626        wp_enqueue_script( 'media' );
     27        wp_localize_script( 'media-grid', 'mediaGridSettings', array( 'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH )  ) );
    2728
    2829        require_once( ABSPATH . 'wp-admin/admin-header.php' );
    2930        include( ABSPATH . 'wp-admin/admin-footer.php' );
  • src/wp-includes/js/media-grid.js

     
    1 /* global _wpMediaViewsL10n, setUserSetting, deleteUserSetting, MediaElementPlayer */
     1/* global _wpMediaViewsL10n, setUserSetting, deleteUserSetting, MediaElementPlayer, mediaGridSettings*/
    22(function($, _, Backbone, wp) {
    33        var media = wp.media, l10n;
    44
     
    120120                 * @global wp.Uploader
    121121                 */
    122122                initialize: function() {
     123                        var self = this;
    123124                        _.defaults( this.options, {
    124125                                title:     l10n.mediaLibraryTitle,
    125126                                modal:     false,
     
    168169                        this.createStates();
    169170                        this.bindHandlers();
    170171                        this.render();
     172
     173                        // Set up the Backbone router after a brief delay
     174                        _.delay( function(){
     175                                wp.media.mediarouter = new media.view.Frame.Router( self );
     176                                // Verify pushState support and activate
     177                                if ( window.history && window.history.pushState ) {
     178                                        Backbone.history.start({
     179                                                root: mediaGridSettings.adminUrl,
     180                                                pushState: true
     181                                        });
     182                                }
     183                        }, 150);
     184
     185                        // Update the URL when entering search string (at most once per second)
     186                        $( '#media-search-input' ).on( 'input', _.debounce( function() {
     187                                if ( '' !== $( this ).val() ) {
     188                                        wp.media.mediarouter.navigate( wp.media.mediarouter.baseUrl( '?search=' + $( this ).val() ), { trigger: false, replace: false } );
     189                                }
     190                        }, 1000 ) );
    171191                },
    172192
    173193                createSelection: function() {
     
    247267                                hasNext = false;
    248268                        }
    249269
    250                         new media.view.Frame.EditAttachment({
     270                        wp.media.editAttachmentFrame = new media.view.Frame.EditAttachment({
    251271                                hasPrevious:    hasPrevious,
    252272                                hasNext:        hasNext,
    253273                                model:          model,
     
    324344        });
    325345
    326346        /**
     347         * A router for handling the browser history and application state
     348         */
     349        media.view.Frame.Router = Backbone.Router.extend({
     350
     351                mediaFrame: '',
     352
     353                initialize: function( mediaFrame ){
     354                        this.mediaFrame = mediaFrame;
     355                },
     356
     357                routes: {
     358                        'upload.php?item=:slug':    'showitem',
     359                        'upload.php?search=:query': 'search',
     360                        ':default':                 'defaultRoute'
     361                },
     362
     363                // Map routes against the page URL
     364                baseUrl: function( url ) {
     365                        return 'upload.php' + url;
     366                },
     367
     368                // Respond to the search route by filling the search field and trigggering the input event
     369                search: function( query ) {
     370                        // Ensure modal closed, see back button
     371                        this.closeModal();
     372                        $( '#media-search-input' ).val( query ).trigger( 'input' );
     373                },
     374
     375                // Show the modal with a specific item
     376                showitem: function( query ) {
     377                        var library = this.mediaFrame.state().get('library');
     378
     379                        // Remove existing modal if present
     380                        this.closeModal();
     381                        // Trigger the media frame to open the correct item
     382                        this.mediaFrame.trigger( 'edit:attachment', library.findWhere( { id: parseInt( query, 10 ) } ) );
     383                },
     384
     385                // Close the modal if set up
     386                closeModal: function() {
     387                        if ( 'undefined' !== typeof wp.media.editAttachmentFrame ) {
     388                                wp.media.editAttachmentFrame.modal.remove();
     389                        }
     390                },
     391
     392                // Default route: make sure the modal and search are reset
     393                defaultRoute: function() {
     394                        this.closeModal();
     395                        $( '#media-search-input' ).val( '' ).trigger( 'input' );
     396                }
     397        });
     398
     399        /**
    327400         * A frame for editing the details of a specific media item.
    328401         *
    329402         * Opens in a modal by default.
     
    340413                        'click':                    'collapse',
    341414                        'click .delete-media-item': 'deleteMediaItem',
    342415                        'click .left':              'previousMediaItem',
    343                         'click .right':             'nextMediaItem'
    344                 },
     416                        'click .right':             'nextMediaItem',
     417                        'keydown':                  'keyEvent'
     418                        },
    345419
    346420                initialize: function() {
    347421                        var self = this;
     
    373447                                // Completely destroy the modal DOM element when closing it.
    374448                                this.modal.close = function() {
    375449                                        self.modal.remove();
     450                                        // Reset the browser URL
    376451                                };
    377452
    378453                                this.modal.content( this );
    379454                                this.modal.open();
     455
     456                                // Update browser url when navigating media details
     457                                wp.media.mediarouter.navigate( wp.media.mediarouter.baseUrl( '?item=' + this.options.model.id ), { trigger: false, replace: false } );
     458
     459                                // Ensure modal gains focus, otherwise keyboard events lost
     460                                $( '.attachment-fields input:first' ).focus();
     461                                $( '.media-modal-backdrop, .media-modal-close' ).on( 'click', function() {
     462                                        self.resetRoute();
     463                                } );
    380464                        }
    381465                },
    382466
     
    482566                                return;
    483567                        this.modal.close();
    484568                        this.options.gridController.trigger( 'edit:attachment:next', this.model );
     569                },
     570                /**
     571                 * Respond to the keyboard events: right arrow, left arrow, escape.
     572                 */
     573                keyEvent: function( event ) {
     574                        // The right arrow key
     575                        if ( event.keyCode === 39 ) {
     576                                if ( ! this.options.hasNext ) { return; }
     577                                _.once( this.nextMediaItem() );
     578                        }
     579
     580                        // The left arrow key
     581                        if ( event.keyCode === 37 ) {
     582                                if ( ! this.options.hasPrevious ) { return; }
     583                                _.once( this.previousMediaItem() );
     584                        }
     585
     586                        // Pressing the escape key routes back to main url
     587                        if ( event.keyCode === 27 ) {
     588                                this.resetRoute();
     589                                return event;
     590                        }
     591                },
     592
     593                resetRoute: function() {
     594                        wp.media.mediarouter.navigate( wp.media.mediarouter.baseUrl( '' ), { trigger: false, replace: false } );
     595                        return;
    485596                }
    486597
    487598        });