Merge "Change 'editfont' default preference to 'monospace'"
[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 toplinksTitle,
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,
21 {
22 savedQueriesPreferenceName: savedQueriesPreferenceName
23 }
24 ),
25 $overlay = $( '<div>' )
26 .addClass( 'mw-rcfilters-ui-overlay' ),
27 filtersWidget = new mw.rcfilters.ui.FilterWrapperWidget(
28 controller, filtersModel, savedQueriesModel, changesListModel, { $overlay: $overlay } ),
29 markSeenButton,
30 currentPage = mw.config.get( 'wgCanonicalNamespace' ) +
31 ':' +
32 mw.config.get( 'wgCanonicalSpecialPageName' );
33
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' ) );
39
40 controller.initialize(
41 mw.config.get( 'wgStructuredChangeFilters' ),
42 mw.config.get( 'wgFormattedNamespaces' ),
43 mw.config.get( 'wgRCFiltersChangeTags' )
44 );
45
46 // eslint-disable-next-line no-new
47 new mw.rcfilters.ui.FormWrapperWidget(
48 filtersModel, changesListModel, controller, $( 'fieldset.cloptions' ) );
49
50 $( '.rcfilters-container' ).append( filtersWidget.$element );
51 $( 'body' ).append( $overlay );
52 $( '.rcfilters-head' ).addClass( 'mw-rcfilters-ui-ready' );
53
54 $( 'a.mw-helplink' ).attr(
55 'href',
56 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review'
57 );
58
59 controller.replaceUrl();
60
61 if ( currentPage === 'Special:Recentchanges' ) {
62 toplinksTitle = new OO.ui.ButtonWidget( {
63 framed: false,
64 indicator: topLinksCookieValue === 'collapsed' ? 'down' : 'up',
65 flags: [ 'progressive' ],
66 label: $( '<span>' ).append( mw.message( 'rcfilters-other-review-tools' ).parse() ).contents()
67 } );
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' )
73 .makeCollapsible( {
74 collapsed: topLinksCookieValue === 'collapsed',
75 $customTogglers: toplinksTitle.$element
76 } )
77 .on( 'beforeExpand.mw-collapsible', function () {
78 mw.cookie.set( topLinksCookieName, 'expanded' );
79 toplinksTitle.setIndicator( 'up' );
80 } )
81 .on( 'beforeCollapse.mw-collapsible', function () {
82 mw.cookie.set( topLinksCookieName, 'collapsed' );
83 toplinksTitle.setIndicator( 'down' );
84 } )
85 .appendTo( '.mw-rcfilters-ui-filterWrapperWidget-top-placeholder' );
86 } // end Special:RC
87
88 if ( currentPage === 'Special:Watchlist' ) {
89 markSeenButton = new mw.rcfilters.ui.MarkSeenButtonWidget( controller, changesListModel );
90 $( 'form#mw-watchlist-resetbutton' ).detach();
91 filtersWidget.prependToTopRow( markSeenButton );
92 } // end Special:WL
93 }
94 };
95
96 $( rcfilters.init );
97
98 module.exports = rcfilters;
99
100 }( mediaWiki, jQuery ) );