diff --git a/src/wp-admin/upload.php b/src/wp-admin/upload.php index 5346c2aef1..5408395dc7 100644 --- a/src/wp-admin/upload.php +++ b/src/wp-admin/upload.php @@ -25,7 +25,10 @@ if ( 'grid' === $mode ) { wp_enqueue_script( 'media-grid' ); wp_enqueue_script( 'media' ); - $vars = wp_edit_attachments_query_vars(); + $q = $_GET; + // let JS handle this + unset( $q['s'] ); + $vars = wp_edit_attachments_query_vars( $q ); $ignore = array( 'mode', 'post_type', 'post_status', 'posts_per_page' ); foreach ( $vars as $key => $value ) { if ( ! $value || in_array( $key, $ignore ) ) { @@ -67,7 +70,7 @@ if ( 'grid' === $mode ) { require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?> -
+

-1 ) { + href = href.replace( /mode=[^&]+/g, 'mode=list' ); + } else { + href += href.indexOf( '?' ) > -1 ? '&mode=list' : '?mode=list'; } - self.gridRouter.navigate( self.gridRouter.baseUrl( url ) ); - }, 1000 ) ); + href = href.replace( 'search=', 's=' ); + listMode.prop( 'href', href ); + } ); }, /** diff --git a/src/wp-includes/js/media/views/frame/manage.js b/src/wp-includes/js/media/views/frame/manage.js index 1c02071887..190f397f39 100644 --- a/src/wp-includes/js/media/views/frame/manage.js +++ b/src/wp-includes/js/media/views/frame/manage.js @@ -83,15 +83,39 @@ Manage = MediaFrame.extend({ this.createStates(); this.bindRegionModeHandlers(); this.render(); + this.bindSearchHandler(); + }, + + bindSearchHandler: function() { + var search = this.$( '#media-search-input' ), + currentSearch = this.options.container.data( 'search' ), + searchView = this.browserView.toolbar.get( 'search' ).$el, + listMode = this.$( '.view-list' ), + + input = _.debounce( function (e) { + var val = $( e.currentTarget ).val(), + url = ''; + + if ( val ) { + url += '?search=' + val; + } + this.gridRouter.navigate( this.gridRouter.baseUrl( url ) ); + }, 1000 ); // Update the URL when entering search string (at most once per second) - $( '#media-search-input' ).on( 'input', _.debounce( function(e) { - var val = $( e.currentTarget ).val(), url = ''; - if ( val ) { - url += '?search=' + val; + search.on( 'input', _.bind( input, this ) ); + searchView.val( currentSearch ).trigger( 'input' ); + + this.gridRouter.on( 'route:search', function () { + var href = window.location.href; + if ( href.indexOf( 'mode=' ) > -1 ) { + href = href.replace( /mode=[^&]+/g, 'mode=list' ); + } else { + href += href.indexOf( '?' ) > -1 ? '&mode=list' : '?mode=list'; } - self.gridRouter.navigate( self.gridRouter.baseUrl( url ) ); - }, 1000 ) ); + href = href.replace( 'search=', 's=' ); + listMode.prop( 'href', href ); + } ); }, /**