2 * JavaScript for Special:RecentChanges
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
,
25 savedQueriesPreferenceName
: savedQueriesPreferenceName
,
26 daysPreferenceName
: daysPreferenceName
,
27 limitPreferenceName
: limitPreferenceName
,
28 normalizeTarget
: specialPage
=== 'Recentchangeslinked'
32 // TODO: The changesListWrapperWidget should be able to initialize
33 // after the model is ready.
35 if ( specialPage
=== 'Recentchanges' ) {
36 $topSection
= $( '.mw-recentchanges-toplinks' ).detach();
37 } else if ( specialPage
=== 'Watchlist' ) {
38 $( '#contentSub, form#mw-watchlist-resetbutton' ).remove();
39 $topSection
= $( '.watchlistDetails' ).detach().contents();
40 } else if ( specialPage
=== 'Recentchangeslinked' ) {
41 conditionalViews
.recentChangesLinked
= {
73 mainWrapperWidget
= new mw
.rcfilters
.ui
.MainWrapperWidget(
79 $topSection
: $topSection
,
80 $filtersContainer
: $( '.rcfilters-container' ),
81 $changesListContainer
: $( [
83 '.mw-changeslist-empty',
84 '.mw-changeslist-timeout',
85 '.mw-changeslist-notargetpage'
87 $formContainer
: $initialFieldset
91 // Remove the -loading class that may have been added on the server side.
92 // If we are in fact going to load a default saved query, this .initialize()
93 // call will do that and add the -loading class right back.
94 $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
96 controller
.initialize(
97 mw
.config
.get( 'wgStructuredChangeFilters' ),
98 // All namespaces without Media namespace
99 rcfilters
.getNamespaces( [ 'Media' ] ),
100 mw
.config
.get( 'wgRCFiltersChangeTags' ),
104 mainWrapperWidget
.initFormWidget( specialPage
);
106 $( 'a.mw-helplink' ).attr(
108 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
111 controller
.replaceUrl();
113 mainWrapperWidget
.setTopSection( specialPage
);
116 * Fired when initialization of the filtering interface for changes list is complete.
118 * @event structuredChangeFilters_ui_initialized
121 mw
.hook( 'structuredChangeFilters.ui.initialized' ).fire();
125 * Get list of namespaces and remove unused ones
127 * @member mw.rcfilters
130 * @param {Array} unusedNamespaces Names of namespaces to remove
131 * @return {Array} Filtered array of namespaces
133 getNamespaces: function ( unusedNamespaces
) {
134 var i
, length
, name
, id
,
135 namespaceIds
= mw
.config
.get( 'wgNamespaceIds' ),
136 namespaces
= mw
.config
.get( 'wgFormattedNamespaces' );
138 for ( i
= 0, length
= unusedNamespaces
.length
; i
< length
; i
++ ) {
139 name
= unusedNamespaces
[ i
];
140 id
= namespaceIds
[ name
.toLowerCase() ];
141 delete namespaces
[ id
];
148 // Early execute of init
149 if ( document
.readyState
=== 'interactive' || document
.readyState
=== 'complete' ) {
155 module
.exports
= rcfilters
;
157 }( mediaWiki
, jQuery
) );