Merge "Improve flaky SiteStatsTest"
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / mw.rcfilters.init.js
1 /*!
2 * JavaScript for Special:RecentChanges
3 */
4 ( function ( mw, $ ) {
5 var rcfilters = {
6 /**
7 * @member mw.rcfilters
8 * @private
9 */
10 init: function () {
11 var $topLinks,
12 rcTopSection,
13 $watchlistDetails,
14 wlTopSection,
15 savedQueriesPreferenceName = mw.config.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
16 filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
17 changesListModel = new mw.rcfilters.dm.ChangesListViewModel(),
18 savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel(),
19 controller = new mw.rcfilters.Controller(
20 filtersModel, changesListModel, savedQueriesModel,
21 {
22 savedQueriesPreferenceName: savedQueriesPreferenceName
23 }
24 ),
25 $overlay = $( '<div>' )
26 .addClass( 'mw-rcfilters-ui-overlay' ),
27 filtersWidget = new mw.rcfilters.ui.FilterWrapperWidget(
28 controller, filtersModel, savedQueriesModel, changesListModel, { $overlay: $overlay } ),
29 savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
30 controller, savedQueriesModel, { $overlay: $overlay }
31 ),
32 currentPage = mw.config.get( 'wgCanonicalNamespace' ) +
33 ':' +
34 mw.config.get( 'wgCanonicalSpecialPageName' );
35
36 // TODO: The changesListWrapperWidget should be able to initialize
37 // after the model is ready.
38 // eslint-disable-next-line no-new
39 new mw.rcfilters.ui.ChangesListWrapperWidget(
40 filtersModel, changesListModel, controller, $( '.mw-changeslist, .mw-changeslist-empty' ) );
41
42 controller.initialize(
43 mw.config.get( 'wgStructuredChangeFilters' ),
44 mw.config.get( 'wgFormattedNamespaces' ),
45 mw.config.get( 'wgRCFiltersChangeTags' )
46 );
47
48 // eslint-disable-next-line no-new
49 new mw.rcfilters.ui.FormWrapperWidget(
50 filtersModel, changesListModel, controller, $( 'fieldset.cloptions' ) );
51
52 $( '.rcfilters-container' ).append( filtersWidget.$element );
53 $( 'body' ).append( $overlay );
54 $( '.rcfilters-head' ).addClass( 'mw-rcfilters-ui-ready' );
55
56 $( 'a.mw-helplink' ).attr(
57 'href',
58 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
59 );
60
61 controller.replaceUrl();
62
63 if ( currentPage === 'Special:Recentchanges' ||
64 currentPage === 'Special:Recentchangeslinked' ) {
65 $topLinks = $( '.mw-recentchanges-toplinks' ).detach();
66
67 rcTopSection = new mw.rcfilters.ui.RcTopSectionWidget(
68 savedLinksListWidget, $topLinks
69 );
70 filtersWidget.setTopSection( rcTopSection.$element );
71 } // end Special:RC
72
73 if ( currentPage === 'Special:Watchlist' ) {
74 $( '#contentSub, form#mw-watchlist-resetbutton' ).detach();
75 $watchlistDetails = $( '.watchlistDetails' ).detach().contents();
76
77 wlTopSection = new mw.rcfilters.ui.WatchlistTopSectionWidget(
78 controller, changesListModel, savedLinksListWidget, $watchlistDetails
79 );
80 filtersWidget.setTopSection( wlTopSection.$element );
81 } // end Special:WL
82
83 /**
84 * Fired when initialization of the filtering interface for changes list is complete.
85 *
86 * @event structuredChangeFilters_ui_initialized
87 * @member mw.hook
88 */
89 mw.hook( 'structuredChangeFilters.ui.initialized' ).fire();
90 }
91 };
92
93 $( rcfilters.init );
94
95 module.exports = rcfilters;
96
97 }( mediaWiki, jQuery ) );