* @private
*/
init: function () {
- var $topLinks,
- topSection,
- $watchlistDetails,
- namespaces,
+ var $topSection,
+ mainWrapperWidget,
+ conditionalViews = {},
+ $initialFieldset = $( 'fieldset.cloptions' ),
savedQueriesPreferenceName = mw.config.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
daysPreferenceName = mw.config.get( 'wgStructuredChangeFiltersDaysPreferenceName' ),
limitPreferenceName = mw.config.get( 'wgStructuredChangeFiltersLimitPreferenceName' ),
filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
- changesListModel = new mw.rcfilters.dm.ChangesListViewModel(),
+ changesListModel = new mw.rcfilters.dm.ChangesListViewModel( $initialFieldset ),
savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
+ specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
controller = new mw.rcfilters.Controller(
filtersModel, changesListModel, savedQueriesModel,
{
savedQueriesPreferenceName: savedQueriesPreferenceName,
daysPreferenceName: daysPreferenceName,
- limitPreferenceName: limitPreferenceName
+ limitPreferenceName: limitPreferenceName,
+ normalizeTarget: specialPage === 'Recentchangeslinked'
}
- ),
- $overlay = $( '<div>' )
- .addClass( 'mw-rcfilters-ui-overlay' ),
- filtersWidget = new mw.rcfilters.ui.FilterWrapperWidget(
- controller, filtersModel, savedQueriesModel, changesListModel, { $overlay: $overlay } ),
- savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
- controller, savedQueriesModel, { $overlay: $overlay }
- ),
- specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
- $changesListRoot = $( [
- '.mw-changeslist',
- '.mw-changeslist-empty',
- '.mw-changeslist-timeout',
- '.mw-changeslist-notargetpage'
- ].join( ', ' ) );
+ );
// TODO: The changesListWrapperWidget should be able to initialize
// after the model is ready.
- // eslint-disable-next-line no-new
- new mw.rcfilters.ui.ChangesListWrapperWidget(
- filtersModel, changesListModel, controller, $changesListRoot );
+ if ( specialPage === 'Recentchanges' ) {
+ $topSection = $( '.mw-recentchanges-toplinks' ).detach();
+ } else if ( specialPage === 'Watchlist' ) {
+ $( '#contentSub, form#mw-watchlist-resetbutton' ).remove();
+ $topSection = $( '.watchlistDetails' ).detach().contents();
+ } else if ( specialPage === 'Recentchangeslinked' ) {
+ conditionalViews.recentChangesLinked = {
+ groups: [
+ {
+ name: 'page',
+ type: 'any_value',
+ title: '',
+ hidden: true,
+ sticky: true,
+ filters: [
+ {
+ name: 'target',
+ 'default': ''
+ }
+ ]
+ },
+ {
+ name: 'toOrFrom',
+ type: 'boolean',
+ title: '',
+ hidden: true,
+ sticky: true,
+ filters: [
+ {
+ name: 'showlinkedto',
+ 'default': false
+ }
+ ]
+ }
+ ]
+ };
+ }
+
+ mainWrapperWidget = new mw.rcfilters.ui.MainWrapperWidget(
+ controller,
+ filtersModel,
+ savedQueriesModel,
+ changesListModel,
+ {
+ $topSection: $topSection,
+ $filtersContainer: $( '.rcfilters-container' ),
+ $changesListContainer: $( [
+ '.mw-changeslist',
+ '.mw-changeslist-empty',
+ '.mw-changeslist-timeout',
+ '.mw-changeslist-notargetpage'
+ ].join( ', ' ) ),
+ $formContainer: $initialFieldset
+ }
+ );
// Remove the -loading class that may have been added on the server side.
// If we are in fact going to load a default saved query, this .initialize()
// call will do that and add the -loading class right back.
$( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
- // Remove Media namespace
- namespaces = mw.config.get( 'wgFormattedNamespaces' );
- delete namespaces[ mw.config.get( 'wgNamespaceIds' ).media ];
-
controller.initialize(
mw.config.get( 'wgStructuredChangeFilters' ),
- namespaces,
- mw.config.get( 'wgRCFiltersChangeTags' )
+ // All namespaces without Media namespace
+ rcfilters.getNamespaces( [ 'Media' ] ),
+ mw.config.get( 'wgRCFiltersChangeTags' ),
+ conditionalViews
);
- // eslint-disable-next-line no-new
- new mw.rcfilters.ui.FormWrapperWidget(
- filtersModel, changesListModel, controller, $( 'fieldset.cloptions' ) );
-
- $( '.rcfilters-container' ).append( filtersWidget.$element );
- $( 'body' )
- .append( $overlay )
- .addClass( 'mw-rcfilters-ui-initialized' );
+ mainWrapperWidget.initFormWidget( specialPage );
$( 'a.mw-helplink' ).attr(
'href',
controller.replaceUrl();
- if ( specialPage === 'Recentchanges' ) {
- $topLinks = $( '.mw-recentchanges-toplinks' ).detach();
-
- topSection = new mw.rcfilters.ui.RcTopSectionWidget(
- savedLinksListWidget, $topLinks
- );
- filtersWidget.setTopSection( topSection.$element );
- } // end Recentchanges
-
- if ( specialPage === 'Recentchangeslinked' ) {
- topSection = new mw.rcfilters.ui.RclTopSectionWidget(
- savedLinksListWidget, controller,
- filtersModel.getGroup( 'toOrFrom' ).getItemByParamName( 'showlinkedto' ),
- filtersModel.getGroup( 'page' ).getItemByParamName( 'target' )
- );
- filtersWidget.setTopSection( topSection.$element );
- } // end Recentchangeslinked
-
- if ( specialPage === 'Watchlist' ) {
- $( '#contentSub, form#mw-watchlist-resetbutton' ).detach();
- $watchlistDetails = $( '.watchlistDetails' ).detach().contents();
-
- topSection = new mw.rcfilters.ui.WatchlistTopSectionWidget(
- controller, changesListModel, savedLinksListWidget, $watchlistDetails
- );
- filtersWidget.setTopSection( topSection.$element );
- } // end Watchlist
+ mainWrapperWidget.setTopSection( specialPage );
/**
* Fired when initialization of the filtering interface for changes list is complete.
* @member mw.hook
*/
mw.hook( 'structuredChangeFilters.ui.initialized' ).fire();
+ },
+
+ /**
+ * Get list of namespaces and remove unused ones
+ *
+ * @member mw.rcfilters
+ * @private
+ *
+ * @param {Array} unusedNamespaces Names of namespaces to remove
+ * @return {Array} Filtered array of namespaces
+ */
+ getNamespaces: function ( unusedNamespaces ) {
+ var i, length, name, id,
+ namespaceIds = mw.config.get( 'wgNamespaceIds' ),
+ namespaces = mw.config.get( 'wgFormattedNamespaces' );
+
+ for ( i = 0, length = unusedNamespaces.length; i < length; i++ ) {
+ name = unusedNamespaces[ i ];
+ id = namespaceIds[ name.toLowerCase() ];
+ delete namespaces[ id ];
+ }
+
+ return namespaces;
}
};