3 * Top section (between page title and filters) on Special:Recentchanges
5 * @extends OO.ui.Widget
8 * @param {mw.rcfilters.ui.SavedLinksListWidget} savedLinksListWidget
9 * @param {jQuery} $topLinks Content of the community-defined links
10 * @param {Object} [config] Configuration object
12 mw
.rcfilters
.ui
.RcTopSectionWidget
= function MwRcfiltersUiRcTopSectionWidget(
13 savedLinksListWidget
, $topLinks
, config
16 topLinksCookieName
= 'rcfilters-toplinks-collapsed-state',
17 topLinksCookie
= mw
.cookie
.get( topLinksCookieName
),
18 topLinksCookieValue
= topLinksCookie
|| 'collapsed',
21 config
= config
|| {};
24 mw
.rcfilters
.ui
.RcTopSectionWidget
.parent
.call( this, config
);
26 this.$topLinks
= $topLinks
;
28 toplinksTitle
= new OO
.ui
.ButtonWidget( {
30 indicator
: topLinksCookieValue
=== 'collapsed' ? 'down' : 'up',
31 flags
: [ 'progressive' ],
32 label
: $( '<span>' ).append( mw
.message( 'rcfilters-other-review-tools' ).parse() ).contents()
36 .addClass( 'mw-rcfilters-ui-ready' )
38 collapsed
: topLinksCookieValue
=== 'collapsed',
39 $customTogglers
: toplinksTitle
.$element
41 .on( 'beforeExpand.mw-collapsible', function () {
42 mw
.cookie
.set( topLinksCookieName
, 'expanded' );
43 toplinksTitle
.setIndicator( 'up' );
44 widget
.switchTopLinks( 'expanded' );
46 .on( 'beforeCollapse.mw-collapsible', function () {
47 mw
.cookie
.set( topLinksCookieName
, 'collapsed' );
48 toplinksTitle
.setIndicator( 'down' );
49 widget
.switchTopLinks( 'collapsed' );
52 this.$topLinks
.find( '.mw-recentchanges-toplinks-title' ).replaceWith( toplinksTitle
.$element
);
54 // Create two positions for the toplinks to toggle between
55 // in the table (first cell) or up above it
56 this.$top
= $( '<div>' )
57 .addClass( 'mw-rcfilters-ui-rcTopSectionWidget-topLinks-top' );
58 this.$tableTopLinks
= $( '<div>' )
59 .addClass( 'mw-rcfilters-ui-cell' )
60 .addClass( 'mw-rcfilters-ui-rcTopSectionWidget-topLinks-table' );
64 .addClass( 'mw-rcfilters-ui-rcTopSectionWidget' )
68 .addClass( 'mw-rcfilters-ui-table' )
71 .addClass( 'mw-rcfilters-ui-row' )
75 .addClass( 'mw-rcfilters-ui-table-placeholder' )
76 .addClass( 'mw-rcfilters-ui-cell' ),
79 .addClass( 'mw-rcfilters-ui-cell' )
80 .addClass( 'mw-rcfilters-ui-rcTopSectionWidget-savedLinks' )
81 .append( savedLinksListWidget
.$element
) :
87 // Initialize top links position
88 widget
.switchTopLinks( topLinksCookieValue
);
93 OO
.inheritClass( mw
.rcfilters
.ui
.RcTopSectionWidget
, OO
.ui
.Widget
);
96 * Switch the top links widget from inside the table (when collapsed)
97 * to the 'top' (when open)
99 * @param {string} [state] The state of the top links widget: 'expanded' or 'collapsed'
101 mw
.rcfilters
.ui
.RcTopSectionWidget
.prototype.switchTopLinks = function ( state
) {
102 state
= state
|| 'expanded';
104 if ( state
=== 'expanded' ) {
105 this.$top
.append( this.$topLinks
);
107 this.$tableTopLinks
.append( this.$topLinks
);