Revert "[MCR] Turn Revision into a proxy to new code."
[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 $topSection,
12 mainWrapperWidget,
13 conditionalViews = {},
14 $initialFieldset = $( 'fieldset.cloptions' ),
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( $initialFieldset ),
20 savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
21 specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
22 controller = new mw.rcfilters.Controller(
23 filtersModel, changesListModel, savedQueriesModel,
24 {
25 savedQueriesPreferenceName: savedQueriesPreferenceName,
26 daysPreferenceName: daysPreferenceName,
27 limitPreferenceName: limitPreferenceName
28 }
29 );
30
31 // TODO: The changesListWrapperWidget should be able to initialize
32 // after the model is ready.
33
34 if ( specialPage === 'Recentchanges' ) {
35 $topSection = $( '.mw-recentchanges-toplinks' ).detach();
36 } else if ( specialPage === 'Watchlist' ) {
37 $( '#contentSub, form#mw-watchlist-resetbutton' ).remove();
38 $topSection = $( '.watchlistDetails' ).detach().contents();
39 } else if ( specialPage === 'Recentchangeslinked' ) {
40 conditionalViews.recentChangesLinked = {
41 groups: [
42 {
43 name: 'page',
44 type: 'any_value',
45 title: '',
46 hidden: true,
47 isSticky: false,
48 filters: [
49 {
50 name: 'target',
51 'default': ''
52 }
53 ]
54 },
55 {
56 name: 'toOrFrom',
57 type: 'boolean',
58 title: '',
59 hidden: true,
60 isSticky: false,
61 filters: [
62 {
63 name: 'showlinkedto',
64 'default': false
65 }
66 ]
67 }
68 ]
69 };
70 }
71
72 mainWrapperWidget = new mw.rcfilters.ui.MainWrapperWidget(
73 controller,
74 filtersModel,
75 savedQueriesModel,
76 changesListModel,
77 {
78 $topSection: $topSection,
79 $filtersContainer: $( '.rcfilters-container' ),
80 $changesListContainer: $( [
81 '.mw-changeslist',
82 '.mw-changeslist-empty',
83 '.mw-changeslist-timeout',
84 '.mw-changeslist-notargetpage'
85 ].join( ', ' ) ),
86 $formContainer: $initialFieldset
87 }
88 );
89
90 // Remove the -loading class that may have been added on the server side.
91 // If we are in fact going to load a default saved query, this .initialize()
92 // call will do that and add the -loading class right back.
93 $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
94
95 controller.initialize(
96 mw.config.get( 'wgStructuredChangeFilters' ),
97 // All namespaces without Media namespace
98 rcfilters.getNamespaces( [ 'Media' ] ),
99 mw.config.get( 'wgRCFiltersChangeTags' ),
100 conditionalViews
101 );
102
103 $( 'a.mw-helplink' ).attr(
104 'href',
105 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
106 );
107
108 controller.replaceUrl();
109
110 mainWrapperWidget.setTopSection( specialPage );
111
112 /**
113 * Fired when initialization of the filtering interface for changes list is complete.
114 *
115 * @event structuredChangeFilters_ui_initialized
116 * @member mw.hook
117 */
118 mw.hook( 'structuredChangeFilters.ui.initialized' ).fire();
119 },
120
121 /**
122 * Get list of namespaces and remove unused ones
123 *
124 * @member mw.rcfilters
125 * @private
126 *
127 * @param {Array} unusedNamespaces Names of namespaces to remove
128 * @return {Array} Filtered array of namespaces
129 */
130 getNamespaces: function ( unusedNamespaces ) {
131 var i, length, name, id,
132 namespaceIds = mw.config.get( 'wgNamespaceIds' ),
133 namespaces = mw.config.get( 'wgFormattedNamespaces' );
134
135 for ( i = 0, length = unusedNamespaces.length; i < length; i++ ) {
136 name = unusedNamespaces[ i ];
137 id = namespaceIds[ name.toLowerCase() ];
138 delete namespaces[ id ];
139 }
140
141 return namespaces;
142 }
143 };
144
145 // Early execute of init
146 if ( document.readyState === 'interactive' || document.readyState === 'complete' ) {
147 rcfilters.init();
148 } else {
149 $( rcfilters.init );
150 }
151
152 module.exports = rcfilters;
153
154 }( mediaWiki, jQuery ) );