2 * JavaScript for Special:RecentChanges
12 topLinksCookieName
= 'rcfilters-toplinks-collapsed-state',
13 topLinksCookie
= mw
.cookie
.get( topLinksCookieName
),
14 topLinksCookieValue
= topLinksCookie
|| 'collapsed',
15 savedQueriesPreferenceName
= mw
.config
.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
16 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
17 changesListModel
= new mw
.rcfilters
.dm
.ChangesListViewModel(),
18 savedQueriesModel
= new mw
.rcfilters
.dm
.SavedQueriesModel(),
19 controller
= new mw
.rcfilters
.Controller(
20 filtersModel
, changesListModel
, savedQueriesModel
,
22 savedQueriesPreferenceName
: savedQueriesPreferenceName
25 $overlay
= $( '<div>' )
26 .addClass( 'mw-rcfilters-ui-overlay' ),
27 filtersWidget
= new mw
.rcfilters
.ui
.FilterWrapperWidget(
28 controller
, filtersModel
, savedQueriesModel
, changesListModel
, { $overlay
: $overlay
} ),
30 currentPage
= mw
.config
.get( 'wgCanonicalNamespace' ) +
32 mw
.config
.get( 'wgCanonicalSpecialPageName' );
34 // TODO: The changesListWrapperWidget should be able to initialize
35 // after the model is ready.
36 // eslint-disable-next-line no-new
37 new mw
.rcfilters
.ui
.ChangesListWrapperWidget(
38 filtersModel
, changesListModel
, controller
, $( '.mw-changeslist, .mw-changeslist-empty' ) );
40 controller
.initialize(
41 mw
.config
.get( 'wgStructuredChangeFilters' ),
42 mw
.config
.get( 'wgFormattedNamespaces' ),
43 mw
.config
.get( 'wgRCFiltersChangeTags' )
46 // eslint-disable-next-line no-new
47 new mw
.rcfilters
.ui
.FormWrapperWidget(
48 filtersModel
, changesListModel
, controller
, $( 'fieldset.cloptions' ) );
50 $( '.rcfilters-container' ).append( filtersWidget
.$element
);
51 $( 'body' ).append( $overlay
);
52 $( '.rcfilters-head' ).addClass( 'mw-rcfilters-ui-ready' );
54 $( 'a.mw-helplink' ).attr(
56 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
59 controller
.replaceUrl();
61 if ( currentPage
=== 'Special:Recentchanges' ) {
62 toplinksTitle
= new OO
.ui
.ButtonWidget( {
64 indicator
: topLinksCookieValue
=== 'collapsed' ? 'down' : 'up',
65 flags
: [ 'progressive' ],
66 label
: $( '<span>' ).append( mw
.message( 'rcfilters-other-review-tools' ).parse() ).contents()
68 $( '.mw-recentchanges-toplinks-title' ).replaceWith( toplinksTitle
.$element
);
69 // Move the top links to a designated area so it's near the
70 // 'saved filters' button and make it collapsible
71 $( '.mw-recentchanges-toplinks' )
72 .addClass( 'mw-rcfilters-ui-ready' )
74 collapsed
: topLinksCookieValue
=== 'collapsed',
75 $customTogglers
: toplinksTitle
.$element
77 .on( 'beforeExpand.mw-collapsible', function () {
78 mw
.cookie
.set( topLinksCookieName
, 'expanded' );
79 toplinksTitle
.setIndicator( 'up' );
81 .on( 'beforeCollapse.mw-collapsible', function () {
82 mw
.cookie
.set( topLinksCookieName
, 'collapsed' );
83 toplinksTitle
.setIndicator( 'down' );
85 .appendTo( '.mw-rcfilters-ui-filterWrapperWidget-top-placeholder' );
88 if ( currentPage
=== 'Special:Watchlist' ) {
89 markSeenButton
= new mw
.rcfilters
.ui
.MarkSeenButtonWidget( controller
, changesListModel
);
90 $( 'form#mw-watchlist-resetbutton' ).detach();
91 filtersWidget
.prependToTopRow( markSeenButton
);
98 module
.exports
= rcfilters
;
100 }( mediaWiki
, jQuery
) );