- $filters = [];
-
- if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
- $filters[] = Html::rawElement(
- 'span',
- [ 'class' => 'mw-input-with-label' ],
- Xml::checkLabel(
- $this->msg( 'history-show-deleted' )->text(),
- 'deletedOnly',
- 'mw-show-deleted-only',
- $this->opts['deletedOnly'],
- [ 'class' => 'mw-input' ]
- )
- );
- }
+ $ns = $this->opts['namespace'] ?? null;
+ $fields['namespace'] = [
+ 'type' => 'namespaceselect',
+ 'label' => $this->msg( 'namespace' )->text(),
+ 'name' => 'namespace',
+ 'cssclass' => 'namespaceselector',
+ 'default' => $ns,
+ 'id' => 'namespace',
+ 'section' => 'contribs-top',
+ ];
+ $request = $this->getRequest();
+ $nsFilters = $request->getArray( 'wpfilters' );
+ $fields['nsFilters'] = [
+ 'class' => 'HTMLMultiSelectField',
+ 'label' => '',
+ 'name' => 'wpfilters',
+ 'flatlist' => true,
+ // Only shown when namespaces are selected.
+ 'cssclass' => $ns === '' ?
+ 'contribs-ns-filters mw-input-with-label mw-input-hidden' :
+ 'contribs-ns-filters mw-input-with-label',
+ // `contribs-ns-filters` class allows these fields to be toggled on/off by JavaScript.
+ // See resources/src/mediawiki.special.recentchanges.js
+ 'infusable' => true,
+ 'options' => [
+ $this->msg( 'invert' )->text() => 'nsInvert',
+ $this->msg( 'namespace_association' )->text() => 'associated',
+ ],
+ 'default' => $nsFilters,
+ 'section' => 'contribs-top',
+ ];
+ $fields['tagfilter'] = [
+ 'type' => 'tagfilter',
+ 'cssclass' => 'mw-tagfilter-input',
+ 'id' => 'tagfilter',
+ 'label-message' => [ 'tag-filter', 'parse' ],
+ 'name' => 'tagfilter',
+ 'size' => 20,
+ 'section' => 'contribs-top',
+ ];