$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 );
}
};
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,
{
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.
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(
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.
*