6ec120006aa6ddd93e96673adac65b0c4f503591
[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 topSection,
13 $watchlistDetails,
14 namespaces,
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,
23 {
24 savedQueriesPreferenceName: savedQueriesPreferenceName,
25 daysPreferenceName: daysPreferenceName,
26 limitPreferenceName: limitPreferenceName
27 }
28 ),
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 }
35 ),
36 specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
37 $changesListRoot = $( '.mw-changeslist, .mw-changeslist-empty, .mw-changeslist-timeout' );
38
39 // TODO: The changesListWrapperWidget should be able to initialize
40 // after the model is ready.
41
42 // eslint-disable-next-line no-new
43 new mw.rcfilters.ui.ChangesListWrapperWidget(
44 filtersModel, changesListModel, controller, $changesListRoot );
45
46 // Remove the -loading class that may have been added on the server side.
47 // If we are in fact going to load a default saved query, this .initialize()
48 // call will do that and add the -loading class right back.
49 $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
50
51 // Remove Media namespace
52 namespaces = mw.config.get( 'wgFormattedNamespaces' );
53 delete namespaces[ mw.config.get( 'wgNamespaceIds' ).media ];
54
55 controller.initialize(
56 mw.config.get( 'wgStructuredChangeFilters' ),
57 namespaces,
58 mw.config.get( 'wgRCFiltersChangeTags' )
59 );
60
61 // eslint-disable-next-line no-new
62 new mw.rcfilters.ui.FormWrapperWidget(
63 filtersModel, changesListModel, controller, $( 'fieldset.cloptions' ) );
64
65 $( '.rcfilters-container' ).append( filtersWidget.$element );
66 $( 'body' )
67 .append( $overlay )
68 .addClass( 'mw-rcfilters-ui-initialized' );
69
70 $( 'a.mw-helplink' ).attr(
71 'href',
72 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
73 );
74
75 controller.replaceUrl();
76
77 if ( specialPage === 'Recentchanges' ) {
78 $topLinks = $( '.mw-recentchanges-toplinks' ).detach();
79
80 topSection = new mw.rcfilters.ui.RcTopSectionWidget(
81 savedLinksListWidget, $topLinks
82 );
83 filtersWidget.setTopSection( topSection.$element );
84 } // end Recentchanges
85
86 if ( specialPage === 'Recentchangeslinked' ) {
87 topSection = new mw.rcfilters.ui.RclTopSectionWidget(
88 savedLinksListWidget, controller,
89 filtersModel.getGroup( 'toOrFrom' ).getItemByParamName( 'showlinkedto' ),
90 filtersModel.getGroup( 'page' ).getItemByParamName( 'target' )
91 );
92 filtersWidget.setTopSection( topSection.$element );
93 } // end Recentchangeslinked
94
95 if ( specialPage === 'Watchlist' ) {
96 $( '#contentSub, form#mw-watchlist-resetbutton' ).detach();
97 $watchlistDetails = $( '.watchlistDetails' ).detach().contents();
98
99 topSection = new mw.rcfilters.ui.WatchlistTopSectionWidget(
100 controller, changesListModel, savedLinksListWidget, $watchlistDetails
101 );
102 filtersWidget.setTopSection( topSection.$element );
103 } // end Watchlist
104
105 /**
106 * Fired when initialization of the filtering interface for changes list is complete.
107 *
108 * @event structuredChangeFilters_ui_initialized
109 * @member mw.hook
110 */
111 mw.hook( 'structuredChangeFilters.ui.initialized' ).fire();
112 }
113 };
114
115 // Early execute of init
116 if ( document.readyState === 'interactive' || document.readyState === 'complete' ) {
117 rcfilters.init();
118 } else {
119 $( rcfilters.init );
120 }
121
122 module.exports = rcfilters;
123
124 }( mediaWiki, jQuery ) );