jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/366497 )
Change subject: RCFilters: Add 'enhanced' view (Group by pages)
......................................................................
RCFilters: Add 'enhanced' view (Group by pages)
Bug: T168513
Change-Id: If099f8809342f68662f91824a2b023bf90833760
---
M languages/i18n/en.json
M languages/i18n/qqq.json
M resources/Resources.php
M resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
M resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
A
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesLimitPopupWidget.less
M
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitButtonWidget.js
M
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitPopupWidget.js
M
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
9 files changed, 134 insertions(+), 16 deletions(-)
Approvals:
Catrope: Looks good to me, approved
jenkins-bot: Verified
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 8c295b2..396569d 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -1351,6 +1351,8 @@
"recentchanges-submit": "Show",
"rcfilters-legend-heading": "<strong>List of abbreviations:</strong>",
"rcfilters-other-review-tools": "<strong>Other review tools:</strong>",
+ "rcfilters-group-results-by-page": "Group results by page",
+ "rcfilters-grouping-title": "Grouping",
"rcfilters-activefilters": "Active filters",
"rcfilters-advancedfilters": "Advanced filters",
"rcfilters-limit-title": "Changes to show",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index 89f6f41..ba0a8da 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -1541,6 +1541,8 @@
"recentchanges-submit": "Label for submit button in
[[Special:RecentChanges]]\n{{Identical|Show}}",
"rcfilters-legend-heading": "Used as a heading for legend box on
[[Special:RecentChanges]] and [[Special:Watchlist]] when RCFilters are
enabled.",
"rcfilters-other-review-tools": "Used as a heading for the community
collection of other links on [[Special:RecentChanges]] when RCFilters are
enabled.",
+ "rcfilters-group-results-by-page": "A label for the checkbox describing
whether the results in [[Special:RecentChanges]] are grouped by page when
RCFilters are enabled.",
+ "rcfilters-grouping-title": "Title for the section showing display
options for grouping results in [[Special:RecentChanges]] when RCFilters are
enabled.",
"rcfilters-activefilters": "Title for the filters selection showing the
active filters.",
"rcfilters-advancedfilters": "Title for the buttons allowing the user
to switch to the various advanced filters views.",
"rcfilters-limit-title": "Title for the options to change the number of
results shown.",
diff --git a/resources/Resources.php b/resources/Resources.php
index 82f285e..deeb73f 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -1815,6 +1815,7 @@
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.MenuSelectWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ViewSwitchWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ValuePickerWidget.less',
+
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesLimitPopupWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.DatePopupWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less',
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less',
@@ -1835,6 +1836,8 @@
'messages' => [
'rcfilters-activefilters',
'rcfilters-advancedfilters',
+ 'rcfilters-group-results-by-page',
+ 'rcfilters-grouping-title',
'rcfilters-limit-title',
'rcfilters-limit-shownum',
'rcfilters-days-title',
diff --git
a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
index 5cca5d8..e7871b2 100644
--- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
+++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
@@ -142,7 +142,7 @@
// Store the default parameter state
// For this group type, parameter values are
direct
// We need to convert from a boolean to a
string ('1' and '0')
- model.defaultParams[ filter.name ] = String(
Number( !!filter.default ) );
+ model.defaultParams[ filter.name ] = String(
Number( filter.default || 0 ) );
}
} );
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
index 4051eda..d558e46 100644
--- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
@@ -141,6 +141,24 @@
]
};
+ views.display = {
+ groups: [
+ {
+ name: 'display',
+ type: 'boolean',
+ title: '', // Because it's a hidden
group, this title actually appears nowhere
+ hidden: true,
+ isSticky: true,
+ filters: [
+ {
+ name: 'enhanced',
+ 'default': String(
mw.user.options.get( 'usenewrc', 0 ) )
+ }
+ ]
+ }
+ ]
+ };
+
// Before we do anything, we need to see if we require
additional items in the
// groups that have 'AllowArbitrary'. For the moment, those are
only single_option
// groups; if we ever expand it, this might need further
generalization:
@@ -805,6 +823,9 @@
// the initial defaults or from the URL value that is being
normalized
this.updateDaysDefault( this.filtersModel.getGroup( 'days'
).getSelectedItems()[ 0 ].getParamName() );
this.updateLimitDefault( this.filtersModel.getGroup( 'limit'
).getSelectedItems()[ 0 ].getParamName() );
+
+ // TODO: Make these automatic by having the model go over sticky
+ // items and update their default values automatically
};
/**
@@ -848,6 +869,26 @@
};
/**
+ * Update the group by page default value
+ *
+ * @param {number} newValue New value
+ */
+ mw.rcfilters.Controller.prototype.updateGroupByPageDefault = function (
newValue ) {
+ if ( !$.isNumeric( newValue ) ) {
+ return;
+ }
+
+ newValue = Number( newValue );
+
+ if ( mw.user.options.get( 'usenewrc' ) !== newValue ) {
+ // Save the preference
+ new mw.Api().saveOption( 'usenewrc', newValue );
+ // Update the preference for this session
+ mw.user.options.set( 'usenewrc', newValue );
+ }
+ };
+
+ /**
* Synchronize the URL with the current state of the filters
* without adding an history entry.
*/
diff --git
a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesLimitPopupWidget.less
b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesLimitPopupWidget.less
new file mode 100644
index 0000000..b79e54b
--- /dev/null
+++
b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesLimitPopupWidget.less
@@ -0,0 +1,9 @@
+.mw-rcfilters-ui-changesLimitPopupWidget {
+ .oo-ui-fieldsetLayout {
+ margin-top: 1em;
+
+ .oo-ui-fieldsetLayout-header .oo-ui-labelElement-label {
+ font-size: 1em;
+ }
+ }
+}
diff --git
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitButtonWidget.js
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitButtonWidget.js
index 1e5bfc3..c2f20b7 100644
---
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitButtonWidget.js
+++
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitButtonWidget.js
@@ -41,9 +41,11 @@
* Respond to model initialize event
*/
mw.rcfilters.ui.ChangesLimitButtonWidget.prototype.onModelInitialize =
function () {
- var changesLimitPopupWidget, selectedItem, currentValue;
+ var changesLimitPopupWidget, selectedItem, currentValue,
+ displayGroupModel = this.model.getGroup( 'display' );
this.limitGroupModel = this.model.getGroup( 'limit' );
+ this.groupByPageItemModel =
displayGroupModel.getItemByParamName( 'enhanced' );
// HACK: We need the model to be ready before we populate the
button
// and the widget, because we require the filter items for the
@@ -52,7 +54,8 @@
// Note: This will be fixed soon!
if ( this.limitGroupModel ) {
changesLimitPopupWidget = new
mw.rcfilters.ui.ChangesLimitPopupWidget(
- this.limitGroupModel
+ this.limitGroupModel,
+ this.groupByPageItemModel
);
selectedItem = this.limitGroupModel.getSelectedItems()[
0 ];
@@ -75,7 +78,10 @@
// Events
this.limitGroupModel.connect( this, { update:
'onLimitGroupModelUpdate' } );
- changesLimitPopupWidget.connect( this, { limit:
'onPopupLimit' } );
+ changesLimitPopupWidget.connect( this, {
+ limit: 'onPopupLimit',
+ groupByPage: 'onPopupGroupByPage'
+ } );
this.$element.append( this.button.$element );
}
@@ -95,6 +101,17 @@
};
/**
+ * Respond to popup limit change event
+ *
+ * @param {boolean} isGrouped The result set is grouped by page
+ */
+ mw.rcfilters.ui.ChangesLimitButtonWidget.prototype.onPopupGroupByPage =
function ( isGrouped ) {
+ this.controller.toggleFilterSelect(
this.groupByPageItemModel.getName(), isGrouped );
+ this.controller.updateGroupByPageDefault( Number( isGrouped ) );
+ this.button.popup.toggle( false );
+ };
+
+ /**
* Respond to limit choose event
*
* @param {string} filterName Filter name
diff --git
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitPopupWidget.js
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitPopupWidget.js
index 02101ab..a8c6c28 100644
---
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitPopupWidget.js
+++
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitPopupWidget.js
@@ -5,31 +5,52 @@
* @extends OO.ui.Widget
*
* @constructor
- * @param {mw.rcfilters.dm.FilterGroup} model Group model for 'limit'
+ * @param {mw.rcfilters.dm.FilterGroup} limitModel Group model for
'limit'
+ * @param {mw.rcfilters.dm.FilterItem} groupByPageItemModel Group model
for 'limit'
* @param {Object} [config] Configuration object
*/
- mw.rcfilters.ui.ChangesLimitPopupWidget = function
MwRcfiltersUiChangesLimitPopupWidget( model, config ) {
+ mw.rcfilters.ui.ChangesLimitPopupWidget = function
MwRcfiltersUiChangesLimitPopupWidget( limitModel, groupByPageItemModel, config
) {
config = config || {};
// Parent
mw.rcfilters.ui.ChangesLimitPopupWidget.parent.call( this,
config );
- this.model = model;
+ this.limitModel = limitModel;
+ this.groupByPageItemModel = groupByPageItemModel;
this.valuePicker = new mw.rcfilters.ui.ValuePickerWidget(
- this.model,
+ this.limitModel,
{
label: mw.msg( 'rcfilters-limit-title' )
}
);
+ this.groupByPageCheckbox = new OO.ui.CheckboxInputWidget( {
+ selected: this.groupByPageItemModel.isSelected()
+ } );
+
// Events
this.valuePicker.connect( this, { choose: [ 'emit', 'limit' ] }
);
+ this.groupByPageCheckbox.connect( this, { change: [ 'emit',
'groupByPage' ] } );
// Initialize
this.$element
.addClass( 'mw-rcfilters-ui-changesLimitPopupWidget' )
- .append( this.valuePicker.$element );
+ .append(
+ this.valuePicker.$element,
+ new OO.ui.FieldsetLayout( {
+ label: mw.msg(
'rcfilters-grouping-title' ),
+ items: [
+ new OO.ui.FieldLayout(
+
this.groupByPageCheckbox,
+ {
+ align: 'inline',
+ label: mw.msg(
'rcfilters-group-results-by-page' )
+ }
+ )
+ ]
+ } ).$element
+ );
};
/* Initialization */
@@ -44,4 +65,18 @@
*
* A limit item was chosen
*/
+
+ /**
+ * @event groupByPage
+ * @param {boolean} isGrouped The results are grouped by page
+ *
+ * Results are grouped by page
+ */
+
+ /**
+ * Respond to group by page model update
+ */
+
mw.rcfilters.ui.ChangesLimitPopupWidget.prototype.onGroupByPageModelUpdate =
function () {
+ this.groupByPageCheckbox.setSelected(
this.groupByPageItemModel.isSelected() );
+ };
}( mediaWiki ) );
diff --git
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
index d571774..42fb5cc 100644
---
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
+++
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
@@ -103,7 +103,13 @@
isEmpty = $changesListContent === 'NO_RESULTS',
$lastSeen,
$indicator,
- $newChanges = $( [] );
+ $newChanges = $( [] ),
+ // For enhanced mode, we have to load these modules,
which are
+ // not loaded for the 'regular' mode in the backend
+ loaderPromise = mw.user.options.get( 'usenewrc' ) ?
+ mw.loader.using( [
'mediawiki.special.changeslist.enhanced', 'mediawiki.icon' ] ) :
+ $.Deferred().resolve(),
+ widget = this;
this.$element.toggleClass( 'mw-changeslist', !isEmpty );
if ( isEmpty ) {
@@ -173,14 +179,17 @@
// Apply highlight
this.applyHighlight();
- if ( !isInitialDOM ) {
- // Make sure enhanced RC re-initializes
correctly
- mw.hook( 'wikipage.content' ).fire(
this.$element );
- }
}
- $( '.rcfilters-spinner' ).addClass( 'mw-rcfilters-ui-ready' );
- this.$element.addClass( 'mw-rcfilters-ui-ready' );
+ loaderPromise.done( function () {
+ if ( !isInitialDOM && !isEmpty ) {
+ // Make sure enhanced RC re-initializes
correctly
+ mw.hook( 'wikipage.content' ).fire(
widget.$element );
+ }
+
+ $( '.rcfilters-spinner' ).addClass(
'mw-rcfilters-ui-ready' );
+ widget.$element.addClass( 'mw-rcfilters-ui-ready' );
+ } );
};
/**
--
To view, visit https://gerrit.wikimedia.org/r/366497
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If099f8809342f68662f91824a2b023bf90833760
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Mooeypoo <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Jack Phoenix <[email protected]>
Gerrit-Reviewer: Mooeypoo <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits