Allow a TitleInputWidget user to decide, if an empty value should be validated
authorFlorian <florian.schmidt.stargatewissen@gmail.com>
Thu, 12 Nov 2015 17:31:57 +0000 (18:31 +0100)
committerBartosz Dziewoński <matma.rex@gmail.com>
Mon, 16 Nov 2015 18:28:41 +0000 (19:28 +0100)
For some use cases an empty value is valid, too, or at least, it's not a reason to
mark the form input red. Special:Search, e.g.. This change implements a new config
for MediaWiki\Widgets\TitleInputWidget, validate, which allows a user of this
widget to decide, if the value of the input type should be validated (empty -> flagged
red).

Extra points:
 * Fix php notice errors for previously added configuration
 * Added doc for previously added configuration

Bug: T106946
Change-Id: I732a2f56a2375d8c708e3b295996187ee209f1a6

includes/widget/TitleInputWidget.php
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js

index 25030b1..8226148 100644 (file)
@@ -15,6 +15,8 @@ class TitleInputWidget extends \OOUI\TextInputWidget {
        protected $namespace = null;
        protected $relative = null;
        protected $suggestions = null;
+       protected $highlightFirst = null;
+       protected $validate = null;
 
        /**
         * @param array $config Configuration options
@@ -22,6 +24,9 @@ class TitleInputWidget extends \OOUI\TextInputWidget {
         * @param bool|null $config['relative'] If a namespace is set,
         *  return a title relative to it (default: true)
         * @param bool|null $config['suggestions'] Display search suggestions (default: true)
+        * @param bool|null $config['highlightFirst'] Automatically highlight
+        *  the first result (default: true)
+        * @param bool|null $config['validate'] Whether the input must be a valid title (default: true)
         */
        public function __construct( array $config = array() ) {
                // Parent constructor
@@ -42,6 +47,9 @@ class TitleInputWidget extends \OOUI\TextInputWidget {
                if ( isset( $config['highlightFirst'] ) ) {
                        $this->highlightFirst = $config['highlightFirst'];
                }
+               if ( isset( $config['validate'] ) ) {
+                       $this->validate = $config['validate'];
+               }
 
                // Initialization
                $this->addClasses( array( 'mw-widget-titleInputWidget' ) );
@@ -64,6 +72,9 @@ class TitleInputWidget extends \OOUI\TextInputWidget {
                if ( $this->highlightFirst !== null ) {
                        $config['highlightFirst'] = $this->highlightFirst;
                }
+               if ( $this->validate !== null ) {
+                       $config['validate'] = $this->validate;
+               }
                return parent::getConfig( $config );
        }
 }
index 67f3e01..84732aa 100644 (file)
@@ -23,6 +23,7 @@
         * @cfg {boolean} [showRedlink] Show red link to exact match if it doesn't exist
         * @cfg {boolean} [showImages] Show page images
         * @cfg {boolean} [showDescriptions] Show page descriptions
+        * @cfg {boolean} [validate=true] Whether the input must be a valid title
         * @cfg {Object} [cache] Result cache which implements a 'set' method, taking keyed values as an argument
         */
        mw.widgets.TitleWidget = function MwWidgetsTitleWidget( config ) {
@@ -44,6 +45,7 @@
                this.showRedlink = !!config.showRedlink;
                this.showImages = !!config.showImages;
                this.showDescriptions = !!config.showDescriptions;
+               this.validate = config.validate !== undefined ? config.validate : true;
                this.cache = config.cache;
 
                // Initialization
         * @return {boolean} The query is valid
         */
        mw.widgets.TitleWidget.prototype.isQueryValid = function () {
-               return !!this.getTitle();
+               return this.validate ? !!this.getTitle() : true;
        };
 
 }( jQuery, mediaWiki ) );