WordPress.org

Make WordPress Core

Ticket #27708: 27708.1.diff

File 27708.1.diff, 3.4 KB (added by matveb, 8 years ago)
  • wp-admin/js/theme.js

     
    218218        //
    219219        // When we are missing a cache object we fire an apiCall()
    220220        // which triggers events of `query:success` or `query:fail`
    221         query: function( request ) {
     221        query: function( request, action ) {
    222222                /**
    223223                 * @static
    224224                 * @type Array
     
    247247
    248248                // Otherwise, send a new API call and add it to the cache.
    249249                if ( ! query && ! isPaginated ) {
    250                         query = this.apiCall( request ).done( function( data ) {
     250                        query = this.apiCall( request, action ).done( function( data ) {
     251
    251252                                // Update the collection with the queried data.
    252                                 self.reset( data.themes );
    253                                 count = data.info.results;
     253                                if ( data.themes ) {
     254                                        self.reset( data.themes );
     255                                        count = data.info.results;
     256                                        // Store the results and the query request
     257                                        queries.push( { themes: data.themes, request: request, total: count } );
    254258
     259                                } else if ( action ) {
     260                                        self.reset( data );
     261                                        count = 1;
     262                                        self.trigger( 'query:theme' );
     263                                }
     264
    255265                                // Trigger a collection refresh event
    256266                                // and a `query:success` event with a `count` argument.
    257267                                self.trigger( 'update' );
    258268                                self.trigger( 'query:success', count );
    259269
    260                                 if ( data.themes.length === 0 ) {
     270                                if ( data.themes && data.themes.length === 0 ) {
    261271                                        self.trigger( 'query:empty' );
    262272                                }
    263273
    264                                 // Store the results and the query request
    265                                 queries.push( { themes: data.themes, request: request, total: count } );
    266274                        }).fail( function() {
    267275                                self.trigger( 'query:fail' );
    268276                        });
    269277                } else {
    270278                        // If it's a paginated request we need to fetch more themes...
    271279                        if ( isPaginated ) {
    272                                 return this.apiCall( request, isPaginated ).done( function( data ) {
     280                                return this.apiCall( request, action, isPaginated ).done( function( data ) {
    273281                                        // Add the new themes to the current collection
    274282                                        // @todo update counter
    275283                                        self.add( data.themes );
     
    314322        },
    315323
    316324        // Send request to api.wordpress.org/themes
    317         apiCall: function( request, paginated ) {
     325        apiCall: function( request, action, paginated ) {
    318326
    319327                // Send tags (and fields) as comma-separated to keep the JSONP query string short.
    320328                if ( request.tag && _.isArray( request.tag ) ) {
    321329                        request.tag = request.tag.join( ',' );
    322330                }
    323331
     332                // Set request action
     333                if ( ! action ) {
     334                        action = 'query_themes'
     335                }
     336
    324337                // JSONP request to .org API
    325338                return $.ajax({
    326339                        url: 'https://api.wordpress.org/themes/info/1.1/?callback=?',
     
    328341
    329342                        // Request data
    330343                        data: {
    331                                 action: 'query_themes',
     344                                action: action,
    332345                                request: _.extend({
    333346                                        per_page: 72,
    334347                                        fields: 'description,tested,requires,rating,downloaded,downloadLink,last_updated,homepage,num_ratings'
     
    15951608        },
    15961609
    15971610        routes: function() {
    1598                 var self = this;
     1611                var self = this
     1612                        request = {};
    15991613                // Bind to our global thx object
    16001614                // so that the object is available to sub-views
    16011615                themes.router = new themes.InstallerRouter();
    16021616
    16031617                // Handles theme details route event
    1604                 themes.router.on( 'route:theme', function( slug ) {
    1605                         self.view.view.expand( slug );
     1618                themes.router.on( 'route:preview', function( slug ) {
     1619                        request.slug = slug;
     1620
     1621                        _.delay( function() {
     1622                                self.view.collection.query( request, 'theme_information' );
     1623                        }, 300 );
    16061624                });
    16071625
    16081626                themes.router.on( 'route:sort', function( sort ) {