RCFilters: Set up conditional views for RCLinked
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / mw.rcfilters.init.js
index bab8ee5..40b8bd2 100644 (file)
@@ -9,17 +9,22 @@
                 */
                init: function () {
                        var $topLinks,
-                               rcTopSection,
+                               topSection,
                                $watchlistDetails,
-                               wlTopSection,
+                               namespaces,
+                               conditionalViews = {},
                                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(),
                                savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
                                controller = new mw.rcfilters.Controller(
                                        filtersModel, changesListModel, savedQueriesModel,
                                        {
-                                               savedQueriesPreferenceName: savedQueriesPreferenceName
+                                               savedQueriesPreferenceName: savedQueriesPreferenceName,
+                                               daysPreferenceName: daysPreferenceName,
+                                               limitPreferenceName: limitPreferenceName
                                        }
                                ),
                                $overlay = $( '<div>' )
                                savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
                                        controller, savedQueriesModel, { $overlay: $overlay }
                                ),
-                               specialPage = mw.config.get( 'wgCanonicalSpecialPageName' );
+                               specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
+                               $changesListRoot = $( [
+                                       '.mw-changeslist',
+                                       '.mw-changeslist-empty',
+                                       '.mw-changeslist-timeout',
+                                       '.mw-changeslist-notargetpage'
+                               ].join( ', ' ) );
+
+                       if ( specialPage === 'Recentchangeslinked' ) {
+                               conditionalViews.recentChangesLinked = {
+                                       groups: [
+                                               {
+                                                       name: 'page',
+                                                       type: 'any_value',
+                                                       title: '',
+                                                       hidden: true,
+                                                       isSticky: false,
+                                                       filters: [
+                                                               {
+                                                                       name: 'target',
+                                                                       'default': ''
+                                                               }
+                                                       ]
+                                               },
+                                               {
+                                                       name: 'toOrFrom',
+                                                       type: 'boolean',
+                                                       title: '',
+                                                       hidden: true,
+                                                       isSticky: false,
+                                                       filters: [
+                                                               {
+                                                                       name: 'showlinkedto',
+                                                                       'default': false
+                                                               }
+                                                       ]
+                                               }
+                                       ]
+                               };
+
+                       }
 
                        // 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, $( '.mw-changeslist, .mw-changeslist-empty' ) );
+                               filtersModel, changesListModel, controller, $changesListRoot );
 
                        // 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' ),
-                               mw.config.get( 'wgFormattedNamespaces' ),
-                               mw.config.get( 'wgRCFiltersChangeTags' )
+                               namespaces,
+                               mw.config.get( 'wgRCFiltersChangeTags' ),
+                               conditionalViews
                        );
 
                        // eslint-disable-next-line no-new
 
                        controller.replaceUrl();
 
-                       if ( specialPage === 'Recentchanges' ||
-                               specialPage === 'Recentchangeslinked' ) {
+                       if ( specialPage === 'Recentchanges' ) {
                                $topLinks = $( '.mw-recentchanges-toplinks' ).detach();
 
-                               rcTopSection = new mw.rcfilters.ui.RcTopSectionWidget(
+                               topSection = new mw.rcfilters.ui.RcTopSectionWidget(
                                        savedLinksListWidget, $topLinks
                                );
-                               filtersWidget.setTopSection( rcTopSection.$element );
-                       } // end Special:RC
+                               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();
 
-                               wlTopSection = new mw.rcfilters.ui.WatchlistTopSectionWidget(
+                               topSection = new mw.rcfilters.ui.WatchlistTopSectionWidget(
                                        controller, changesListModel, savedLinksListWidget, $watchlistDetails
                                );
-                               filtersWidget.setTopSection( wlTopSection.$element );
-                       } // end Special:WL
+                               filtersWidget.setTopSection( topSection.$element );
+                       } // end Watchlist
 
                        /**
                         * Fired when initialization of the filtering interface for changes list is complete.