2 * JavaScript for Special:RecentChanges
15 savedQueriesPreferenceName
= mw
.config
.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
16 daysPreferenceName
= mw
.config
.get( 'wgStructuredChangeFiltersDaysPreferenceName' ),
17 limitPreferenceName
= mw
.config
.get( 'wgStructuredChangeFiltersLimitPreferenceName' ),
18 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
19 changesListModel
= new mw
.rcfilters
.dm
.ChangesListViewModel(),
20 savedQueriesModel
= new mw
.rcfilters
.dm
.SavedQueriesModel( filtersModel
),
21 controller
= new mw
.rcfilters
.Controller(
22 filtersModel
, changesListModel
, savedQueriesModel
,
24 savedQueriesPreferenceName
: savedQueriesPreferenceName
,
25 daysPreferenceName
: daysPreferenceName
,
26 limitPreferenceName
: limitPreferenceName
29 $overlay
= $( '<div>' )
30 .addClass( 'mw-rcfilters-ui-overlay' ),
31 filtersWidget
= new mw
.rcfilters
.ui
.FilterWrapperWidget(
32 controller
, filtersModel
, savedQueriesModel
, changesListModel
, { $overlay
: $overlay
} ),
33 savedLinksListWidget
= new mw
.rcfilters
.ui
.SavedLinksListWidget(
34 controller
, savedQueriesModel
, { $overlay
: $overlay
}
36 specialPage
= mw
.config
.get( 'wgCanonicalSpecialPageName' ),
37 $changesListRoot
= $( [
39 '.mw-changeslist-empty',
40 '.mw-changeslist-timeout',
41 '.mw-changeslist-notargetpage'
44 // TODO: The changesListWrapperWidget should be able to initialize
45 // after the model is ready.
47 // eslint-disable-next-line no-new
48 new mw
.rcfilters
.ui
.ChangesListWrapperWidget(
49 filtersModel
, changesListModel
, controller
, $changesListRoot
);
51 // Remove the -loading class that may have been added on the server side.
52 // If we are in fact going to load a default saved query, this .initialize()
53 // call will do that and add the -loading class right back.
54 $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
56 // Remove Media namespace
57 namespaces
= mw
.config
.get( 'wgFormattedNamespaces' );
58 delete namespaces
[ mw
.config
.get( 'wgNamespaceIds' ).media
];
60 controller
.initialize(
61 mw
.config
.get( 'wgStructuredChangeFilters' ),
63 mw
.config
.get( 'wgRCFiltersChangeTags' )
66 // eslint-disable-next-line no-new
67 new mw
.rcfilters
.ui
.FormWrapperWidget(
68 filtersModel
, changesListModel
, controller
, $( 'fieldset.cloptions' ) );
70 $( '.rcfilters-container' ).append( filtersWidget
.$element
);
73 .addClass( 'mw-rcfilters-ui-initialized' );
75 $( 'a.mw-helplink' ).attr(
77 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
80 controller
.replaceUrl();
82 if ( specialPage
=== 'Recentchanges' ) {
83 $topLinks
= $( '.mw-recentchanges-toplinks' ).detach();
85 topSection
= new mw
.rcfilters
.ui
.RcTopSectionWidget(
86 savedLinksListWidget
, $topLinks
88 filtersWidget
.setTopSection( topSection
.$element
);
89 } // end Recentchanges
91 if ( specialPage
=== 'Recentchangeslinked' ) {
92 topSection
= new mw
.rcfilters
.ui
.RclTopSectionWidget(
93 savedLinksListWidget
, controller
,
94 filtersModel
.getGroup( 'toOrFrom' ).getItemByParamName( 'showlinkedto' ),
95 filtersModel
.getGroup( 'page' ).getItemByParamName( 'target' )
97 filtersWidget
.setTopSection( topSection
.$element
);
98 } // end Recentchangeslinked
100 if ( specialPage
=== 'Watchlist' ) {
101 $( '#contentSub, form#mw-watchlist-resetbutton' ).detach();
102 $watchlistDetails
= $( '.watchlistDetails' ).detach().contents();
104 topSection
= new mw
.rcfilters
.ui
.WatchlistTopSectionWidget(
105 controller
, changesListModel
, savedLinksListWidget
, $watchlistDetails
107 filtersWidget
.setTopSection( topSection
.$element
);
111 * Fired when initialization of the filtering interface for changes list is complete.
113 * @event structuredChangeFilters_ui_initialized
116 mw
.hook( 'structuredChangeFilters.ui.initialized' ).fire();
120 // Early execute of init
121 if ( document
.readyState
=== 'interactive' || document
.readyState
=== 'complete' ) {
127 module
.exports
= rcfilters
;
129 }( mediaWiki
, jQuery
) );