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