2 * JavaScript for Special:RecentChanges
4 mw
.rcfilters
.HighlightColors
= require( './HighlightColors.js' );
5 mw
.rcfilters
.ui
.MainWrapperWidget
= require( './ui/MainWrapperWidget.js' );
8 * Get list of namespaces and remove unused ones
10 * @member mw.rcfilters
13 * @param {Array} unusedNamespaces Names of namespaces to remove
14 * @return {Array} Filtered array of namespaces
16 function getNamespaces( unusedNamespaces
) {
17 var i
, length
, name
, id
,
18 namespaceIds
= mw
.config
.get( 'wgNamespaceIds' ),
19 namespaces
= mw
.config
.get( 'wgFormattedNamespaces' );
21 for ( i
= 0, length
= unusedNamespaces
.length
; i
< length
; i
++ ) {
22 name
= unusedNamespaces
[ i
];
23 id
= namespaceIds
[ name
.toLowerCase() ];
24 delete namespaces
[ id
];
31 * @member mw.rcfilters
37 conditionalViews
= {},
38 $initialFieldset
= $( 'fieldset.cloptions' ),
39 savedQueriesPreferenceName
= mw
.config
.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
40 daysPreferenceName
= mw
.config
.get( 'wgStructuredChangeFiltersDaysPreferenceName' ),
41 limitPreferenceName
= mw
.config
.get( 'wgStructuredChangeFiltersLimitPreferenceName' ),
42 activeFiltersCollapsedName
= mw
.config
.get( 'wgStructuredChangeFiltersCollapsedPreferenceName' ),
43 initialCollapsedState
= mw
.config
.get( 'wgStructuredChangeFiltersCollapsedState' ),
44 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
45 changesListModel
= new mw
.rcfilters
.dm
.ChangesListViewModel( $initialFieldset
),
46 savedQueriesModel
= new mw
.rcfilters
.dm
.SavedQueriesModel( filtersModel
),
47 specialPage
= mw
.config
.get( 'wgCanonicalSpecialPageName' ),
48 controller
= new mw
.rcfilters
.Controller(
49 filtersModel
, changesListModel
, savedQueriesModel
,
51 savedQueriesPreferenceName
: savedQueriesPreferenceName
,
52 daysPreferenceName
: daysPreferenceName
,
53 limitPreferenceName
: limitPreferenceName
,
54 collapsedPreferenceName
: activeFiltersCollapsedName
,
55 normalizeTarget
: specialPage
=== 'Recentchangeslinked'
59 // TODO: The changesListWrapperWidget should be able to initialize
60 // after the model is ready.
62 if ( specialPage
=== 'Recentchanges' ) {
63 $topSection
= $( '.mw-recentchanges-toplinks' ).detach();
64 } else if ( specialPage
=== 'Watchlist' ) {
65 $( '#contentSub, form#mw-watchlist-resetbutton' ).remove();
66 $topSection
= $( '.watchlistDetails' ).detach().contents();
67 } else if ( specialPage
=== 'Recentchangeslinked' ) {
68 conditionalViews
.recentChangesLinked
= {
100 mainWrapperWidget
= new mw
.rcfilters
.ui
.MainWrapperWidget(
106 $wrapper
: $( 'body' ),
107 $topSection
: $topSection
,
108 $filtersContainer
: $( '.mw-rcfilters-container' ),
109 $changesListContainer
: $( '.mw-changeslist, .mw-changeslist-empty' ),
110 $formContainer
: $initialFieldset
,
111 collapsed
: initialCollapsedState
115 // Remove the -loading class that may have been added on the server side.
116 // If we are in fact going to load a default saved query, this .initialize()
117 // call will do that and add the -loading class right back.
118 $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
120 controller
.initialize(
121 mw
.config
.get( 'wgStructuredChangeFilters' ),
122 // All namespaces without Media namespace
123 getNamespaces( [ 'Media' ] ),
124 require( './config.json' ).RCFiltersChangeTags
,
128 mainWrapperWidget
.initFormWidget( specialPage
);
130 $( 'a.mw-helplink' ).attr(
132 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
135 controller
.replaceUrl();
137 mainWrapperWidget
.setTopSection( specialPage
);
140 * Fired when initialization of the filtering interface for changes list is complete.
142 * @event structuredChangeFilters_ui_initialized
145 mw
.hook( 'structuredChangeFilters.ui.initialized' ).fire();
148 // Import i18n messages from config
149 mw
.messages
.set( mw
.config
.get( 'wgStructuredChangeFiltersMessages' ) );
151 // Early execute of init
152 if ( document
.readyState
=== 'interactive' || document
.readyState
=== 'complete' ) {
158 module
.exports
= mw
.rcfilters
;