'class' => 'HTMLUserTextField',
'label' => $this->msg( 'listusersfrom' )->text(),
'name' => 'username',
- 'value' => $this->requestedUser,
+ 'default' => $this->requestedUser,
],
'dropdown' => [
'label' => $this->msg( 'group' )->text(),
'name' => 'group',
- 'value' => $this->requestedGroup,
+ 'default' => $this->requestedGroup,
'class' => 'HTMLSelectField',
'options' => $groupOptions,
],
'label' => $this->msg( 'listusers-editsonly' )->text(),
'name' => 'editsOnly',
'id' => 'editsOnly',
- 'value' => $this->editsOnly
+ 'default' => $this->editsOnly
],
'creationSort' => [
'type' => 'check',
'label' => $this->msg( 'listusers-creationsort' )->text(),
'name' => 'creationSort',
'id' => 'creationSort',
- 'value' => $this->creationSort
+ 'default' => $this->creationSort
],
'desc' => [
'type' => 'check',
'label' => $this->msg( 'listusers-desc' )->text(),
'name' => 'desc',
'id' => 'desc',
- 'value' => $this->mDefaultDirection
+ 'default' => $this->mDefaultDirection
],
'limithiddenfield' => [
'class' => 'HTMLHiddenField',
'name' => 'limit',
- 'value' => $this->mLimit
+ 'default' => $this->mLimit
]
];
$htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
$htmlForm
->setMethod( 'get' )
+ ->setAction( Title::newFromText( $self )->getLocalURL() )
->setId( 'mw-listusers-form' )
->setFormIdentifier( 'mw-listusers-form' )
->suppressDefaultSubmit()
"resources/src/mediawiki.action",
"resources/src/mediawiki.language",
"resources/src/mediawiki.messagePoster",
+ "resources/src/mediawiki.rcfilters",
"resources/src/mediawiki.special",
"resources/src/mediawiki.toolbar",
"resources/src/mediawiki.widgets",
"mw.Upload*",
"mw.ForeignUpload",
"mw.ForeignStructuredUpload*",
- "mw.GallerySlideshow"
+ "mw.GallerySlideshow",
+ "mw.rcfilters*"
]
},
{
/**
* Get the highlight parameters based on current filter configuration
*
- * @return {Object} Object where keys are "<filter name>_color" and values
+ * @return {Object} Object where keys are `<filter name>_color` and values
* are the selected highlight colors.
*/
mw.rcfilters.dm.FiltersViewModel.prototype.getHighlightParameters = function () {
*
* @param {Object} representation Object containing representation of
* some or all highlight values
- * @return {Object} Object where keys are "<filter name>_color" and values
+ * @return {Object} Object where keys are `<filter name>_color` and values
* are the selected highlight colors. The returned object
* contains all available filters either with a color value
* or with null.
/**
* View model for saved queries
*
+ * @class
* @mixins OO.EventEmitter
* @mixins OO.EmitterList
*
/**
* View model for a single saved query
*
+ * @class
* @mixins OO.EventEmitter
*
* @constructor
/* Events */
/**
- * @update
+ * @event update
*
* Model has been updated
*/
/**
* Get query label
*
- * @return {label} Query label
+ * @return {string} Query label
*/
mw.rcfilters.dm.SavedQueryItemModel.prototype.getLabel = function () {
return this.label;
/* eslint no-underscore-dangle: "off" */
/**
* Controller for the filters in Recent Changes
+ * @class
*
+ * @constructor
* @param {mw.rcfilters.dm.FiltersViewModel} filtersModel Filters view model
* @param {mw.rcfilters.dm.ChangesListViewModel} changesListModel Changes list view model
* @param {mw.rcfilters.dm.SavedQueriesModel} savedQueriesModel Saved queries model
views = {},
items = [],
uri = new mw.Uri(),
- $changesList = $( '.mw-changeslist' ).first().contents(),
- experimentalViews = mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' );
+ $changesList = $( '.mw-changeslist' ).first().contents();
// Prepare views
- if ( namespaceStructure && experimentalViews ) {
+ if ( namespaceStructure ) {
items = [];
$.each( namespaceStructure, function ( namespaceID, label ) {
// Build and clean up the individual namespace items definition
} ]
};
}
- if ( tagList && experimentalViews ) {
+ if ( tagList ) {
views.tags = {
title: mw.msg( 'rcfilters-view-tags' ),
trigger: '#',
);
};
- /**
- * Get an object representing the default parameter state, whether
- * it is from the model defaults or from the saved queries.
- *
- * @return {Object} Default parameters
- */
- mw.rcfilters.Controller.prototype._getDefaultParams = function () {
- var data, queryHighlights,
- savedParams = {},
- savedHighlights = {},
- defaultSavedQueryItem = this.savedQueriesModel.getItemByID( this.savedQueriesModel.getDefault() );
-
- if ( mw.config.get( 'wgStructuredChangeFiltersEnableSaving' ) &&
- defaultSavedQueryItem ) {
-
- data = defaultSavedQueryItem.getData();
-
- queryHighlights = data.highlights || {};
- savedParams = this.filtersModel.getParametersFromFilters( data.filters || {} );
-
- // Translate highlights to parameters
- savedHighlights.highlight = String( Number( queryHighlights.highlight ) );
- $.each( queryHighlights, function ( filterName, color ) {
- if ( filterName !== 'highlights' ) {
- savedHighlights[ filterName + '_color' ] = color;
- }
- } );
-
- return $.extend( true, {}, savedParams, savedHighlights, { invert: data.invert } );
- }
-
- return $.extend(
- { highlight: '0' },
- this.filtersModel.getDefaultParams()
- );
- };
-
/**
* Get an object representing the default parameter state, whether
* it is from the model defaults or from the saved queries.
* Track usage of highlight feature
*
* @param {string} action
- * @param {array|object|string} filters
+ * @param {Array|Object|string} filters
*/
mw.rcfilters.Controller.prototype._trackHighlight = function ( action, filters ) {
filters = typeof filters === 'string' ? { name: filters } : filters;
* Supported highlight colors.
* Warning: These are also hardcoded in "styles/mw.rcfilters.variables.less"
*
- * @type {string[]}
+ * @member mw.rcfilters
+ * @property {string[]}
*/
mw.rcfilters.HighlightColors = [ 'c1', 'c2', 'c3', 'c4', 'c5' ];
}( mediaWiki ) );
* JavaScript for Special:RecentChanges
*/
( function ( mw, $ ) {
- /**
- * @class mw.rcfilters
- * @singleton
- */
var rcfilters = {
- /** */
+ /**
+ * @member mw.rcfilters
+ * @private
+ */
init: function () {
var filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
changesListModel = new mw.rcfilters.dm.ChangesListViewModel(),
( function ( mw ) {
+ /**
+ * @class
+ * @singleton
+ */
mw.rcfilters = {
dm: {},
ui: {},
/**
* Widget defining the button controlling the popup for the number of results
*
+ * @class
* @extends OO.ui.Widget
*
* @constructor
/**
* Widget defining the button controlling the popup for the date range for the results
*
+ * @class
* @extends OO.ui.Widget
*
* @constructor
/**
* @static
- * @inheritdoc
*/
mw.rcfilters.ui.FilterItemHighlightButton.static.cancelButtonMouseDownEvents = true;
/**
* Menu header for the RCFilters filters menu
*
+ * @class
* @extends OO.ui.Widget
*
* @constructor
/**
* A widget representing a menu section for filter groups
*
+ * @class
* @extends OO.ui.MenuSectionOptionWidget
*
* @constructor
/**
* List displaying all filter groups
*
+ * @class
* @extends OO.ui.MenuTagMultiselectWidget
* @mixins OO.ui.mixin.PendingElement
*
footers: [
{
name: 'viewSelect',
- disabled: !mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ),
sticky: false,
// View select menu, appears on default view only
$element: $( '<div>' )
);
}
- if ( mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ) ) {
- // Add a selector at the right of the input
- this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
- classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select-widget' ],
- items: [
- new OO.ui.ButtonOptionWidget( {
- framed: false,
- data: 'namespaces',
- icon: 'article',
- title: mw.msg( 'rcfilters-view-namespaces-tooltip' )
- } ),
- new OO.ui.ButtonOptionWidget( {
- framed: false,
- data: 'tags',
- icon: 'tag',
- title: mw.msg( 'rcfilters-view-tags-tooltip' )
- } )
- ]
- } );
+ // Add a selector at the right of the input
+ this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
+ classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select-widget' ],
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ framed: false,
+ data: 'namespaces',
+ icon: 'article',
+ title: mw.msg( 'rcfilters-view-namespaces-tooltip' )
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ framed: false,
+ data: 'tags',
+ icon: 'tag',
+ title: mw.msg( 'rcfilters-view-tags-tooltip' )
+ } )
+ ]
+ } );
- // Rearrange the UI so the select widget is at the right of the input
- this.$element.append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-table' )
- .append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-row' )
- .append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-cell' )
- .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-input' )
- .append( this.input.$element ),
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-cell' )
- .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select' )
- .append( this.viewsSelectWidget.$element )
- )
- )
- );
+ // Rearrange the UI so the select widget is at the right of the input
+ this.$element.append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-table' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-row' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-input' )
+ .append( this.input.$element ),
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select' )
+ .append( this.viewsSelectWidget.$element )
+ )
+ )
+ );
- // Event
- this.viewsSelectWidget.connect( this, { choose: 'onViewsSelectWidgetChoose' } );
- }
+ // Event
+ this.viewsSelectWidget.connect( this, { choose: 'onViewsSelectWidgetChoose' } );
rcFiltersRow.append(
$( '<div>' )
};
/**
- * @inheridoc
+ * @inheritdoc
*/
mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onChangeTags = function () {
// Parent method
} );
// Hide namespaces and tags
- if ( mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ) ) {
- $namespaceSelect.closest( 'tr' ).detach();
- this.$element.find( '.mw-tagfilter-label' ).closest( 'tr' ).detach();
- }
+ $namespaceSelect.closest( 'tr' ).detach();
+ this.$element.find( '.mw-tagfilter-label' ).closest( 'tr' ).detach();
// Hide limit and days
this.$element.find( '.rclinks' ).detach();
/**
* Quick links menu option widget
*
+ * @class
* @extends OO.ui.Widget
* @mixins OO.ui.mixin.LabelElement
* @mixins OO.ui.mixin.IconElement
/**
* Quick links widget
*
+ * @class
* @extends OO.ui.Widget
*
* @constructor
* Widget defining the behavior used to choose from a set of values
* in a single_value group
*
+ * @class
* @extends OO.ui.Widget
* @mixins OO.ui.mixin.LabelElement
*
<directory suffix=".php">../../includes</directory>
<directory suffix=".php">../../languages</directory>
<directory suffix=".php">../../maintenance</directory>
+ <exclude>
+ <directory suffix=".php">../../languages/messages</directory>
+ </exclude>
</whitelist>
</filter>
</phpunit>