Merge "Show a warning in edit preview when a template loop is detected"
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / ui / mw.rcfilters.ui.ChangesLimitPopupWidget.js
1 ( function ( mw ) {
2 /**
3 * Widget defining the popup to choose number of results
4 *
5 * @extends OO.ui.Widget
6 *
7 * @constructor
8 * @param {mw.rcfilters.dm.FilterGroup} limitModel Group model for 'limit'
9 * @param {mw.rcfilters.dm.FilterItem} groupByPageItemModel Group model for 'limit'
10 * @param {Object} [config] Configuration object
11 */
12 mw.rcfilters.ui.ChangesLimitPopupWidget = function MwRcfiltersUiChangesLimitPopupWidget( limitModel, groupByPageItemModel, config ) {
13 config = config || {};
14
15 // Parent
16 mw.rcfilters.ui.ChangesLimitPopupWidget.parent.call( this, config );
17
18 this.limitModel = limitModel;
19 this.groupByPageItemModel = groupByPageItemModel;
20
21 this.valuePicker = new mw.rcfilters.ui.ValuePickerWidget(
22 this.limitModel,
23 {
24 label: mw.msg( 'rcfilters-limit-title' )
25 }
26 );
27
28 this.groupByPageCheckbox = new OO.ui.CheckboxInputWidget( {
29 selected: this.groupByPageItemModel.isSelected()
30 } );
31
32 // Events
33 this.valuePicker.connect( this, { choose: [ 'emit', 'limit' ] } );
34 this.groupByPageCheckbox.connect( this, { change: [ 'emit', 'groupByPage' ] } );
35 this.groupByPageItemModel.connect( this, { update: 'onGroupByPageModelUpdate' } );
36
37 // Initialize
38 this.$element
39 .addClass( 'mw-rcfilters-ui-changesLimitPopupWidget' )
40 .append(
41 this.valuePicker.$element,
42 new OO.ui.FieldsetLayout( {
43 label: mw.msg( 'rcfilters-grouping-title' ),
44 items: [
45 new OO.ui.FieldLayout(
46 this.groupByPageCheckbox,
47 {
48 align: 'inline',
49 label: mw.msg( 'rcfilters-group-results-by-page' )
50 }
51 )
52 ]
53 } ).$element
54 );
55 };
56
57 /* Initialization */
58
59 OO.inheritClass( mw.rcfilters.ui.ChangesLimitPopupWidget, OO.ui.Widget );
60
61 /* Events */
62
63 /**
64 * @event limit
65 * @param {string} name Item name
66 *
67 * A limit item was chosen
68 */
69
70 /**
71 * @event groupByPage
72 * @param {boolean} isGrouped The results are grouped by page
73 *
74 * Results are grouped by page
75 */
76
77 /**
78 * Respond to group by page model update
79 */
80 mw.rcfilters.ui.ChangesLimitPopupWidget.prototype.onGroupByPageModelUpdate = function () {
81 this.groupByPageCheckbox.setSelected( this.groupByPageItemModel.isSelected() );
82 };
83 }( mediaWiki ) );