Merge "RCFilters: Convert saved queries from filters to parameters"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 3 Oct 2017 20:51:51 +0000 (20:51 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 3 Oct 2017 20:51:51 +0000 (20:51 +0000)
1  2 
includes/Preferences.php
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js

diff --combined includes/Preferences.php
@@@ -847,6 -847,7 +847,6 @@@ class Preferences 
                                        $context->msg( 'editfont-monospace' )->text() => 'monospace',
                                        $context->msg( 'editfont-sansserif' )->text() => 'sans-serif',
                                        $context->msg( 'editfont-serif' )->text() => 'serif',
 -                                      $context->msg( 'editfont-default' )->text() => 'default',
                                ]
                        ];
                }
                $defaultPreferences['rcfilters-wl-saved-queries'] = [
                        'type' => 'api',
                ];
+               $defaultPreferences['rcfilters-saved-queries-versionbackup'] = [
+                       'type' => 'api',
+               ];
+               $defaultPreferences['rcfilters-wl-saved-queries-versionbackup'] = [
+                       'type' => 'api',
+               ];
                $defaultPreferences['rcfilters-rclimit'] = [
                        'type' => 'api',
                ];
                return result;
        };
  
+       /**
+        * Get the parameter names that represent filters that are excluded
+        * from saved queries.
+        *
+        * @return {string[]} Parameter names
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getExcludedParams = function () {
+               var result = [];
+               $.each( this.groups, function ( name, model ) {
+                       if ( model.isExcludedFromSavedQueries() ) {
+                               if ( model.isPerGroupRequestParameter() ) {
+                                       result.push( name );
+                               } else {
+                                       // Each filter is its own param
+                                       result = result.concat( model.getItems().map( function ( filterItem ) {
+                                               return filterItem.getParamName();
+                                       } ) );
+                               }
+                       }
+               } );
+               return result;
+       };
        /**
         * Analyze the groups and their filters and output an object representing
         * the state of the parameters they represent.
                enable = enable === undefined ? !this.highlightEnabled : enable;
  
                if ( this.highlightEnabled !== enable ) {
 -                      this.highlightEnabled = enable;
 -
 +                      // HACK make sure highlights are disabled globally while we toggle on the items,
 +                      // otherwise we'll call clearHighlight() and applyHighlight() many many times
 +                      this.highlightEnabled = false;
                        this.getItems().forEach( function ( filterItem ) {
 -                              filterItem.toggleHighlight( this.highlightEnabled );
 -                      }.bind( this ) );
 +                              filterItem.toggleHighlight( enable );
 +                      } );
  
 +                      this.highlightEnabled = enable;
                        this.emit( 'highlightChange', this.highlightEnabled );
                }
        };
@@@ -15,7 -15,7 +15,7 @@@
                                savedQueriesPreferenceName = mw.config.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
                                filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
                                changesListModel = new mw.rcfilters.dm.ChangesListViewModel(),
-                               savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel(),
+                               savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
                                controller = new mw.rcfilters.Controller(
                                        filtersModel, changesListModel, savedQueriesModel,
                                        {
@@@ -29,7 -29,9 +29,7 @@@
                                savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
                                        controller, savedQueriesModel, { $overlay: $overlay }
                                ),
 -                              currentPage = mw.config.get( 'wgCanonicalNamespace' ) +
 -                                      ':' +
 -                                      mw.config.get( 'wgCanonicalSpecialPageName' );
 +                              specialPage = mw.config.get( 'wgCanonicalSpecialPageName' );
  
                        // TODO: The changesListWrapperWidget should be able to initialize
                        // after the model is ready.
@@@ -64,8 -66,8 +64,8 @@@
  
                        controller.replaceUrl();
  
 -                      if ( currentPage === 'Special:Recentchanges' ||
 -                              currentPage === 'Special:Recentchangeslinked' ) {
 +                      if ( specialPage === 'Recentchanges' ||
 +                              specialPage === 'Recentchangeslinked' ) {
                                $topLinks = $( '.mw-recentchanges-toplinks' ).detach();
  
                                rcTopSection = new mw.rcfilters.ui.RcTopSectionWidget(
@@@ -74,7 -76,7 +74,7 @@@
                                filtersWidget.setTopSection( rcTopSection.$element );
                        } // end Special:RC
  
 -                      if ( currentPage === 'Special:Watchlist' ) {
 +                      if ( specialPage === 'Watchlist' ) {
                                $( '#contentSub, form#mw-watchlist-resetbutton' ).detach();
                                $watchlistDetails = $( '.watchlistDetails' ).detach().contents();
  
                                filtersWidget.setTopSection( wlTopSection.$element );
                        } // end Special:WL
  
 +                      // Log performance data
 +                      if ( window.performance && window.performance.now ) {
 +                              mw.track(
 +                                      'timing.MediaWiki.timing.structuredChangeFilters.ready.' + specialPage,
 +                                      window.performance.now()
 +                              );
 +                              mw.track(
 +                                      'timing.MediaWiki.timing.structuredChangeFilters.backendResponse.' + specialPage,
 +                                      mw.config.get( 'wgBackendResponseTime' )
 +                              );
 +                      }
 +
                        /**
                         * Fired when initialization of the filtering interface for changes list is complete.
                         *