jenkins-bot has submitted this change and it was merged. Change subject: Use OOUI HTMLForm for Special:Watchlist ......................................................................
Use OOUI HTMLForm for Special:Watchlist Bug: T99256 Change-Id: I47a8649208279a4090623a3088112fcff9abc4d3 --- M autoload.php A includes/htmlform/HTMLAdvancedSelectNamespace.php A includes/htmlform/HTMLAdvancedSelectNamespaceWithButton.php M includes/htmlform/HTMLCheckField.php M includes/htmlform/HTMLForm.php M includes/specials/SpecialWatchlist.php M resources/Resources.php A resources/src/mediawiki.special/mediawiki.special.watchlist.css 8 files changed, 138 insertions(+), 41 deletions(-) Approvals: Legoktm: Looks good to me, approved Bartosz Dziewoński: Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/autoload.php b/autoload.php index a8940c4..4109740 100644 --- a/autoload.php +++ b/autoload.php @@ -478,6 +478,8 @@ 'GitInfo' => __DIR__ . '/includes/GitInfo.php', 'GlobalDependency' => __DIR__ . '/includes/cache/CacheDependency.php', 'GlobalVarConfig' => __DIR__ . '/includes/config/GlobalVarConfig.php', + 'HTMLAdvancedSelectNamespace' => __DIR__ . '/includes/htmlform/HTMLAdvancedSelectNamespace.php', + 'HTMLAdvancedSelectNamespaceWithButton' => __DIR__ . '/includes/htmlform/HTMLAdvancedSelectNamespaceWithButton.php', 'HTMLApiField' => __DIR__ . '/includes/htmlform/HTMLApiField.php', 'HTMLAutoCompleteSelectField' => __DIR__ . '/includes/htmlform/HTMLAutoCompleteSelectField.php', 'HTMLButtonField' => __DIR__ . '/includes/htmlform/HTMLButtonField.php', diff --git a/includes/htmlform/HTMLAdvancedSelectNamespace.php b/includes/htmlform/HTMLAdvancedSelectNamespace.php new file mode 100644 index 0000000..348d170 --- /dev/null +++ b/includes/htmlform/HTMLAdvancedSelectNamespace.php @@ -0,0 +1,64 @@ +<?php +/** + * Creates a Html::namespaceSelector input field with a button assigned to the input field. + * @since 1.26 + */ +class HTMLAdvancedSelectNamespace extends HTMLSelectNamespace { + function getInputHTML( $value ) { + $allValue = ( isset( $this->mParams['all'] ) ? $this->mParams['all'] : '' ); + + return parent::getInputHTML( $value ) . ' ' . + Xml::checkLabel( + $this->msg( 'invert' )->text(), + $this->mParams['invertname'], + $this->mParams['invertid'], + $this->mParams['invertdefault'], + array( 'title' => $this->msg( 'tooltip-invert' )->text() ) + ) . ' ' . + Xml::checkLabel( + $this->msg( 'namespace_association' )->text(), + $this->mParams['associatedname'], + $this->mParams['associatedid'], + $this->mParams['associateddefault'], + array( 'title' => $this->msg( 'tooltip-namespace_association' )->text() ) + ); + } + + /** + * Get the OOUI version of this field. + * @since 1.26 + * @param string $value + * @return MediaWiki\\Widget\\NamespaceInputWidget A layout with all widget. + */ + public function getInputOOUI( $value ) { + # There are more fields in this Widget as only one, so there are more values instead of only once. + # Filter the data from the request before creating the form to set the correct values to the + # Widget elements. + # Get WebRequest only, if there is an instance of HTMLForm, use default data instead + $invertdefault = false; + $associateddefault = false; + if ( $this->mParent instanceof HTMLForm ) { + $request = $this->mParent->getRequest(); + if ( $request->getCheck( $this->mParams['associatedname'] ) ) { + $associateddefault = true; + } + if ( $request->getCheck( $this->mParams['invertname'] ) ) { + $invertdefault = true; + } + } + + // Unsupported: invertid, associatedid + return new MediaWiki\Widget\NamespaceInputWidget( array( + 'valueNamespace' => $value, + 'nameNamespace' => $this->mName, + 'id' => $this->mID, + 'includeAllValue' => $this->mAllValue, + 'nameInvert' => $this->mParams['invertname'], + 'labelInvert' => $this->msg( 'invert' )->text(), + 'valueInvert' => $invertdefault, + 'nameAssociated' => $this->mParams['associatedname'], + 'valueAssociated' => $associateddefault, + 'labelAssociated' => $this->msg( 'namespace_association' )->text(), + ) ); + } +} diff --git a/includes/htmlform/HTMLAdvancedSelectNamespaceWithButton.php b/includes/htmlform/HTMLAdvancedSelectNamespaceWithButton.php new file mode 100644 index 0000000..71c9509 --- /dev/null +++ b/includes/htmlform/HTMLAdvancedSelectNamespaceWithButton.php @@ -0,0 +1,17 @@ +<?php +/** + * Creates a Html::namespaceSelector input field with a button assigned to the input field. + */ +class HTMLAdvancedSelectNamespaceWithButton extends HTMLAdvancedSelectNamespace { + /** @var HTMLFormClassWithButton $mClassWithButton */ + protected $mClassWithButton = null; + + public function __construct( $info ) { + $this->mClassWithButton = new HTMLFormFieldWithButton( $info ); + parent::__construct( $info ); + } + + public function getInputHTML( $value ) { + return $this->mClassWithButton->getElement( parent::getInputHTML( $value ) ); + } +} diff --git a/includes/htmlform/HTMLCheckField.php b/includes/htmlform/HTMLCheckField.php index 9666c4e..646b0d5 100644 --- a/includes/htmlform/HTMLCheckField.php +++ b/includes/htmlform/HTMLCheckField.php @@ -14,7 +14,7 @@ $attr = $this->getTooltipAndAccessKey(); $attr['id'] = $this->mID; - $attr += $this->getAttributes( array( 'disabled', 'tabindex' ) ); + $attr += $this->getAttributes( array( 'disabled', 'tabindex', 'title' ) ); if ( $this->mClass !== '' ) { $attr['class'] = $this->mClass; diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index a56b398..b10d789 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -140,6 +140,8 @@ 'selectandother' => 'HTMLSelectAndOtherField', 'namespaceselect' => 'HTMLSelectNamespace', 'namespaceselectwithbutton' => 'HTMLSelectNamespaceWithButton', + 'advancednamespaceselect' => 'HTMLAdvancedSelectNamespace', + 'advancednamespaceselectwithbutton' => 'HTMLAdvancedSelectNamespaceWithButton', 'tagfilter' => 'HTMLTagFilter', 'submit' => 'HTMLSubmitField', 'hidden' => 'HTMLHiddenField', diff --git a/includes/specials/SpecialWatchlist.php b/includes/specials/SpecialWatchlist.php index 20f5776..211798e 100644 --- a/includes/specials/SpecialWatchlist.php +++ b/includes/specials/SpecialWatchlist.php @@ -396,6 +396,8 @@ */ public function doHeader( $opts, $numRows ) { $user = $this->getUser(); + $out = $this->getOutput(); + $out->addModules( 'mediawiki.special.watchlist' ); $this->getOutput()->addSubtitle( $this->msg( 'watchlistfor2', $user->getName() ) @@ -450,39 +452,34 @@ $form .= $wlInfo; $form .= $cutofflinks; $form .= $lang->pipeList( $links ) . "\n"; - $form .= "<hr />\n<p>"; - $form .= Html::namespaceSelector( - array( - 'selected' => $opts['namespace'], - 'all' => '', - 'label' => $this->msg( 'namespace' )->text() - ), array( + $form .= "<hr />\n"; + $out->addHtml( $form ); + + $formDescriptor = array( + 'namespace' => array( + 'class' => 'HTMLAdvancedSelectNamespaceWithButton', + 'label-message' => 'namespace', + 'default' => $opts['namespace'], 'name' => 'namespace', 'id' => 'namespace', - 'class' => 'namespaceselector', - ) - ) . ' '; - $form .= Xml::checkLabel( - $this->msg( 'invert' )->text(), - 'invert', - 'nsinvert', - $opts['invert'], - array( 'title' => $this->msg( 'tooltip-invert' )->text() ) - ) . ' '; - $form .= Xml::checkLabel( - $this->msg( 'namespace_association' )->text(), - 'associated', - 'nsassociated', - $opts['associated'], - array( 'title' => $this->msg( 'tooltip-namespace_association' )->text() ) - ) . ' '; - $form .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "</p>\n"; - foreach ( $hiddenFields as $key => $value ) { - $form .= Html::hidden( $key, $value ) . "\n"; - } + 'invertdefault' => $opts['invert'], + 'invertname' => 'invert', + 'invertid' => 'nsinvert', + 'associateddefault' => $opts['associated'], + 'associatedname' => 'associated', + 'associatedid' => 'nsassociated', + 'buttondefault' => $this->msg( 'allpagessubmit' )->text(), + ), + ); + $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() ); + $htmlForm->suppressDefaultSubmit(); + $htmlForm->addHiddenFields( $hiddenFields ); + $htmlForm->prepareForm()->displayForm( false ); + + $form = ''; $form .= Xml::closeElement( 'fieldset' ) . "\n"; $form .= Xml::closeElement( 'form' ) . "\n"; - $this->getOutput()->addHTML( $form ); + $out->addHtml( $form ); $this->setBottomText( $opts ); } @@ -491,6 +488,7 @@ $nondefaults = $opts->getChangedValues(); $form = ""; $user = $this->getUser(); + $out = $this->getOutput(); $dbr = $this->getDB(); $numItems = $this->countItems( $dbr ); @@ -513,19 +511,25 @@ } $form .= "</p>"; + $out->addHTML( $form ); + if ( $numItems > 0 && $showUpdatedMarker ) { - $form .= Xml::openElement( 'form', array( 'method' => 'post', - 'action' => $this->getPageTitle()->getLocalURL(), - 'id' => 'mw-watchlist-resetbutton' ) ) . "\n" . - Xml::submitButton( $this->msg( 'enotif_reset' )->text(), array( 'name' => 'dummy' ) ) . "\n" . - Html::hidden( 'reset', 'all' ) . "\n"; - foreach ( $nondefaults as $key => $value ) { - $form .= Html::hidden( $key, $value ) . "\n"; - } - $form .= Xml::closeElement( 'form' ) . "\n"; + $formDescriptor = array( + 'resetbutton' => array( + 'type' => 'submit', + 'name' => 'dummy', + 'default' => $this->msg( 'enotif_reset' )->text(), + ), + ); + $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() ); + $htmlForm->suppressDefaultSubmit(); + $htmlForm->setId( 'mw-watchlist-resetbutton' ); + $nondefaults['reset'] = 'all'; + $htmlForm->addHiddenFields( $nondefaults ); + $htmlForm->prepareForm()->displayForm( false ); } - $form .= Xml::openElement( 'form', array( + $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getPageTitle()->getLocalURL(), 'id' => 'mw-watchlist-form' @@ -538,7 +542,7 @@ $form .= SpecialRecentChanges::makeLegend( $this->getContext() ); - $this->getOutput()->addHTML( $form ); + $out->addHTML( $form ); } protected function showHideLink( $options, $message, $name, $value ) { diff --git a/resources/Resources.php b/resources/Resources.php index fb0971e..46b44a6 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1655,6 +1655,10 @@ 'mediawiki.special.version' => array( 'styles' => 'resources/src/mediawiki.special/mediawiki.special.version.css', ), + 'mediawiki.special.watchlist' => array( + 'position' => 'top', + 'styles' => 'resources/src/mediawiki.special/mediawiki.special.watchlist.css', + ), /* MediaWiki Installer */ diff --git a/resources/src/mediawiki.special/mediawiki.special.watchlist.css b/resources/src/mediawiki.special/mediawiki.special.watchlist.css new file mode 100644 index 0000000..c802f8c --- /dev/null +++ b/resources/src/mediawiki.special/mediawiki.special.watchlist.css @@ -0,0 +1,4 @@ +.mw-htmlform-ooui-wrapper { + /* We're gonna need a bigger form! */ + width: 60em; +} -- To view, visit https://gerrit.wikimedia.org/r/211131 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I47a8649208279a4090623a3088112fcff9abc4d3 Gerrit-PatchSet: 23 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Florianschmidtwelzow <florian.schmidt.stargatewis...@gmail.com> Gerrit-Reviewer: Bartosz Dziewoński <matma....@gmail.com> Gerrit-Reviewer: Daniel Friesen <dan...@nadir-seen-fire.com> Gerrit-Reviewer: Edokter <er...@darcoury.nl> Gerrit-Reviewer: Florianschmidtwelzow <florian.schmidt.stargatewis...@gmail.com> Gerrit-Reviewer: Jack Phoenix <j...@countervandalism.net> Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org> Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com> Gerrit-Reviewer: Mattflaschen <mflasc...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits