From 53b012ce2ae7cd09acec8ba2cdb7f52284532ce7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Sat, 11 Jul 2015 19:12:10 +0200 Subject: [PATCH] OOUIHTMLForm: Implement HTMLSelectNamespace * Extracted some common code between this and Html::namespaceSelector into a new method Html::namespaceSelectorOptions(). Change-Id: I5e97e5c661582f726153533ad00695b450caed46 --- includes/Html.php | 68 ++++++++++++++--------- includes/htmlform/HTMLSelectNamespace.php | 28 +++++++++- 2 files changed, 68 insertions(+), 28 deletions(-) diff --git a/includes/Html.php b/includes/Html.php index 235096ddde..62ae0b8591 100644 --- a/includes/Html.php +++ b/includes/Html.php @@ -822,6 +822,47 @@ class Html { return self::element( 'textarea', self::getTextInputAttributes( $attribs ), $spacedValue ); } + /** + * Helper for Html::namespaceSelector(). + * @param array $params See Html::namespaceSelector() + * @return array + */ + public static function namespaceSelectorOptions( array $params = array() ) { + global $wgContLang; + + $options = array(); + + if ( !isset( $params['exclude'] ) || !is_array( $params['exclude'] ) ) { + $params['exclude'] = array(); + } + + if ( isset( $params['all'] ) ) { + // add an option that would let the user select all namespaces. + // Value is provided by user, the name shown is localized for the user. + $options[$params['all']] = wfMessage( 'namespacesall' )->text(); + } + // Add all namespaces as options (in the content language) + $options += $wgContLang->getFormattedNamespaces(); + + $optionsOut = array(); + // Filter out namespaces below 0 and massage labels + foreach ( $options as $nsId => $nsName ) { + if ( $nsId < NS_MAIN || in_array( $nsId, $params['exclude'] ) ) { + continue; + } + if ( $nsId === NS_MAIN ) { + // For other namespaces use the namespace prefix as label, but for + // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)") + $nsName = wfMessage( 'blanknamespace' )->text(); + } elseif ( is_int( $nsId ) ) { + $nsName = $wgContLang->convertNamespace( $nsId ); + } + $optionsOut[ $nsId ] = $nsName; + } + + return $optionsOut; + } + /** * Build a drop-down box for selecting a namespace * @@ -841,8 +882,6 @@ class Html { public static function namespaceSelector( array $params = array(), array $selectAttribs = array() ) { - global $wgContLang; - ksort( $selectAttribs ); // Is a namespace selected? @@ -859,37 +898,16 @@ class Html { $params['selected'] = ''; } - if ( !isset( $params['exclude'] ) || !is_array( $params['exclude'] ) ) { - $params['exclude'] = array(); - } if ( !isset( $params['disable'] ) || !is_array( $params['disable'] ) ) { $params['disable'] = array(); } // Associative array between option-values and option-labels - $options = array(); - - if ( isset( $params['all'] ) ) { - // add an option that would let the user select all namespaces. - // Value is provided by user, the name shown is localized for the user. - $options[$params['all']] = wfMessage( 'namespacesall' )->text(); - } - // Add all namespaces as options (in the content language) - $options += $wgContLang->getFormattedNamespaces(); + $options = self::namespaceSelectorOptions( $params ); - // Convert $options to HTML and filter out namespaces below 0 + // Convert $options to HTML $optionsHtml = array(); foreach ( $options as $nsId => $nsName ) { - if ( $nsId < NS_MAIN || in_array( $nsId, $params['exclude'] ) ) { - continue; - } - if ( $nsId === NS_MAIN ) { - // For other namespaces use the namespace prefix as label, but for - // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)") - $nsName = wfMessage( 'blanknamespace' )->text(); - } elseif ( is_int( $nsId ) ) { - $nsName = $wgContLang->convertNamespace( $nsId ); - } $optionsHtml[] = self::element( 'option', array( 'disabled' => in_array( $nsId, $params['disable'] ), diff --git a/includes/htmlform/HTMLSelectNamespace.php b/includes/htmlform/HTMLSelectNamespace.php index b2ec9caa94..dfab6cf27b 100644 --- a/includes/htmlform/HTMLSelectNamespace.php +++ b/includes/htmlform/HTMLSelectNamespace.php @@ -3,13 +3,16 @@ * Wrapper for Html::namespaceSelector to use in HTMLForm */ class HTMLSelectNamespace extends HTMLFormField { - function getInputHTML( $value ) { - $allValue = ( isset( $this->mParams['all'] ) ? $this->mParams['all'] : 'all' ); + public function __construct( $params ) { + parent::__construct( $params ); + $this->mAllValue = isset( $this->mParams['all'] ) ? $this->mParams['all'] : 'all'; + } + function getInputHTML( $value ) { return Html::namespaceSelector( array( 'selected' => $value, - 'all' => $allValue + 'all' => $this->mAllValue ), array( 'name' => $this->mName, 'id' => $this->mID, @@ -17,4 +20,23 @@ class HTMLSelectNamespace extends HTMLFormField { ) ); } + + public function getInputOOUI( $value ) { + $namespaceOptions = Html::namespaceSelectorOptions( array( 'all' => $this->mAllValue ) ); + + $options = array(); + foreach( $namespaceOptions as $id => $name ) { + $options[] = array( + 'data' => (string)$id, + 'label' => $name, + ); + }; + + return new OOUI\DropdownInputWidget( array( + 'options' => $options, + 'value' => $value, + 'name' => $this->mName, + 'id' => $this->mID, + ) ); + } } -- 2.20.1