Move form field auto-focus to dedicated interface/trait
authorMatthias Schmidt <gravatronics@live.com>
Sun, 10 Mar 2019 09:04:33 +0000 (10:04 +0100)
committerMatthias Schmidt <gravatronics@live.com>
Sun, 10 Mar 2019 09:04:33 +0000 (10:04 +0100)
See #2509

wcfsetup/install/files/lib/system/form/builder/field/AbstractFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/AbstractNumericFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/BooleanFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/DateFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/IAutoFocusFormField.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/form/builder/field/IFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/ItemListFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/TAutoFocusFormField.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/form/builder/field/TextFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/user/UserFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/user/UsernameFormField.class.php

index 7967a1443e87535a8983a2d94a7e34740624ae15..3255efde5669e24ec677e4107d4123b1821e6cf4 100644 (file)
@@ -21,12 +21,6 @@ abstract class AbstractFormField implements IFormField {
        use TFormChildNode;
        use TFormElement;
        
-       /**
-        * `true` if this field is auto-focused and `false` otherwise
-        * @var bool
-        */
-       protected $autoFocus = false;
-       
        /**
         * name of the object property this field represents
         * @var null|string
@@ -89,15 +83,6 @@ abstract class AbstractFormField implements IFormField {
                return $this;
        }
        
-       /**
-        * @inheritDoc
-        */
-       public function autoFocus($autoFocus = true) {
-               $this->autoFocus = $autoFocus;
-               
-               return $this;
-       }
-       
        /**
         * @inheritDoc
         */
@@ -173,13 +158,6 @@ abstract class AbstractFormField implements IFormField {
                return true;
        }
        
-       /**
-        * @inheritDoc
-        */
-       public function isAutoFocused() {
-               return $this->autoFocus;
-       }
-       
        /**
         * @inheritDoc
         */
index 7533f5502c78995eabb38634e52e8c98e2c7ecc2..b6031142b0755873221a3407dfb7e4978e8b44ed 100644 (file)
@@ -11,7 +11,8 @@ use wcf\system\form\builder\field\validation\FormFieldValidationError;
  * @package    WoltLabSuite\Core\System\Form\Builder\Field
  * @since      5.2
  */
-abstract class AbstractNumericFormField extends AbstractFormField implements IImmutableFormField, IMaximumFormField, IMinimumFormField, INullableFormField, IPlaceholderFormField, ISuffixedFormField {
+abstract class AbstractNumericFormField extends AbstractFormField implements IAutoFocusFormField, IImmutableFormField, IMaximumFormField, IMinimumFormField, INullableFormField, IPlaceholderFormField, ISuffixedFormField {
+       use TAutoFocusFormField;
        use TImmutableFormField;
        use TMaximumFormField;
        use TMinimumFormField;
index 8e9266a54a8a4ab3d5abdfa1c68bcc13062a9e69..0c5d6f280f153fff51c1820984edfe2ba471a28d 100644 (file)
@@ -11,7 +11,8 @@ use wcf\system\form\builder\field\validation\FormFieldValidationError;
  * @package    WoltLabSuite\Core\System\Form\Builder\Field
  * @since      5.2
  */
-class BooleanFormField extends AbstractFormField implements IImmutableFormField {
+class BooleanFormField extends AbstractFormField implements IAutoFocusFormField, IImmutableFormField {
+       use TAutoFocusFormField;
        use TImmutableFormField;
        
        /**
index 147cf711d234840f86e08c8902a05b4dde0e0b7e..13c13e6244d6c7cdd8cfde14e56084f06e72dda1 100644 (file)
@@ -12,7 +12,8 @@ use wcf\util\DateUtil;
  * @package    WoltLabSuite\Core\System\Form\Builder\Field
  * @since      5.2
  */
-class DateFormField extends AbstractFormField implements IImmutableFormField, INullableFormField {
+class DateFormField extends AbstractFormField implements IAutoFocusFormField, IImmutableFormField, INullableFormField {
+       use TAutoFocusFormField;
        use TImmutableFormField;
        use TNullableFormField;
        
diff --git a/wcfsetup/install/files/lib/system/form/builder/field/IAutoFocusFormField.class.php b/wcfsetup/install/files/lib/system/form/builder/field/IAutoFocusFormField.class.php
new file mode 100644 (file)
index 0000000..43ecca7
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+namespace wcf\system\form\builder\field;
+
+/**
+ * Represents a form field that can be auto-focused.
+ * 
+ * @author     Matthias Schmidt
+ * @copyright  2001-2019 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\System\Form\Builder\Field
+ * @since      5.2
+ */
+interface IAutoFocusFormField {
+       /**
+        * Sets whether this field is auto-focused and returns this field.
+        *
+        * @param       bool            $autoFocus      determines if field is auto-focused
+        * @return      static                          this field
+        */
+       public function autoFocus($autoFocus = true);
+       
+       /**
+        * Returns `true` if this field is auto-focused and returns `false` otherwise.
+        * 
+        * By default, fields are not auto-focused.
+        *
+        * @return      bool
+        */
+       public function isAutoFocused();
+}
index 0e8b7f7a712b823caa7098bf0e527dcecf80ea20..ecdf166a46185500077e7c9f913e7ec51741b878 100644 (file)
@@ -24,13 +24,7 @@ interface IFormField extends IFormChildNode, IFormElement {
         */
        public function addValidationError(IFormFieldValidationError $error);
        
-       /**
-        * Sets whether this field is auto-focused and returns this field.
-        * 
-        * @param       bool            $autoFocus      determines if field is auto-focused
-        * @return      static                          this field
-        */
-       public function autoFocus($autoFocus = true);
+       
        
        /**
         * Adds the given validation error to this field and returns this field.
@@ -107,14 +101,6 @@ interface IFormField extends IFormChildNode, IFormElement {
         */
        public function hasSaveValue();
        
-       /**
-        * Returns `true` if this field is auto-focused and returns `false` otherwise.
-        * By default, fields are not auto-focused.
-        * 
-        * @return      bool
-        */
-       public function isAutoFocused();
-       
        /**
         * Returns `true` if this field has to be filled out and returns `false` otherwise.
         * By default, fields do not have to be filled out.
index d2d47f20c39721bcef961d62d4626d70d668041e..f0d7e5e03e33fea972255277c10d9fa9df6fe887 100644 (file)
@@ -14,7 +14,8 @@ use wcf\util\ArrayUtil;
  * @package    WoltLabSuite\Core\System\Form\Builder\Field
  * @since      5.2
  */
-class ItemListFormField extends AbstractFormField implements IImmutableFormField {
+class ItemListFormField extends AbstractFormField implements IAutoFocusFormField, IImmutableFormField {
+       use TAutoFocusFormField;
        use TImmutableFormField;
        
        /**
diff --git a/wcfsetup/install/files/lib/system/form/builder/field/TAutoFocusFormField.class.php b/wcfsetup/install/files/lib/system/form/builder/field/TAutoFocusFormField.class.php
new file mode 100644 (file)
index 0000000..f1e59d2
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+namespace wcf\system\form\builder\field;
+
+/**
+ * Provides default implementations of `IAutoFocusFormField` methods.
+ * 
+ * @author     Matthias Schmidt
+ * @copyright  2001-2019 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\System\Form\Builder\Field
+ * @since      5.2
+ */
+trait TAutoFocusFormField {
+       /**
+        * `true` if this field is auto-focused and `false` otherwise
+        * @var bool
+        */
+       protected $autoFocus = false;
+       
+       /**
+        * Sets whether this field is auto-focused and returns this field.
+        * 
+        * @param       bool            $autoFocus      determines if field is auto-focused
+        * @return      static                          this field
+        */
+       public function autoFocus($autoFocus = true) {
+               $this->autoFocus = $autoFocus;
+               
+               return $this;
+       }
+       
+       /**
+        * Returns `true` if this field is auto-focused and returns `false` otherwise.
+        * 
+        * By default, fields are not auto-focused.
+        *
+        * @return      bool
+        */
+       public function isAutoFocused() {
+               return $this->autoFocus;
+       }
+}
\ No newline at end of file
index 1e9bc86b2dde51e7e19b56586d8bf1f2888034ea..39d4321909d31893b0012fc31ae2f2b018ce8cfe 100644 (file)
@@ -13,7 +13,8 @@ use wcf\system\language\LanguageFactory;
  * @package    WoltLabSuite\Core\System\Form\Builder\Field
  * @since      5.2
  */
-class TextFormField extends AbstractFormField implements II18nFormField, IImmutableFormField, IMaximumLengthFormField, IMinimumLengthFormField, IPlaceholderFormField {
+class TextFormField extends AbstractFormField implements IAutoFocusFormField, II18nFormField, IImmutableFormField, IMaximumLengthFormField, IMinimumLengthFormField, IPlaceholderFormField {
+       use TAutoFocusFormField;
        use TImmutableFormField;
        use TI18nFormField {
                validate as protected i18nValidate;
index ee3db323838be52abaa84761dc31a66748dc260a..7950deb00244701924dd634b9e5157f547d33fcd 100644 (file)
@@ -2,9 +2,11 @@
 namespace wcf\system\form\builder\field\user;
 use wcf\data\user\UserProfile;
 use wcf\system\form\builder\field\AbstractFormField;
+use wcf\system\form\builder\field\IAutoFocusFormField;
 use wcf\system\form\builder\field\IImmutableFormField;
 use wcf\system\form\builder\field\IMultipleFormField;
 use wcf\system\form\builder\field\INullableFormField;
+use wcf\system\form\builder\field\TAutoFocusFormField;
 use wcf\system\form\builder\field\TImmutableFormField;
 use wcf\system\form\builder\field\TMultipleFormField;
 use wcf\system\form\builder\field\TNullableFormField;
@@ -21,7 +23,8 @@ use wcf\util\StringUtil;
  * @package    WoltLabSuite\Core\System\Form\Builder\Field\User
  * @since      5.2
  */
-class UserFormField extends AbstractFormField implements IImmutableFormField, IMultipleFormField, INullableFormField {
+class UserFormField extends AbstractFormField implements IAutoFocusFormField, IImmutableFormField, IMultipleFormField, INullableFormField {
+       use TAutoFocusFormField;
        use TImmutableFormField;
        use TMultipleFormField;
        use TNullableFormField;
index 95ca23c7123d88245db846c6fd7d9143e52353e9..a45ecc40237cec1355e0a70242ad9eb5528d2247 100644 (file)
@@ -1,11 +1,13 @@
 <?php
 namespace wcf\system\form\builder\field\user;
 use wcf\system\form\builder\field\AbstractFormField;
+use wcf\system\form\builder\field\IAutoFocusFormField;
 use wcf\system\form\builder\field\IImmutableFormField;
 use wcf\system\form\builder\field\IMaximumLengthFormField;
 use wcf\system\form\builder\field\IMinimumLengthFormField;
 use wcf\system\form\builder\field\INullableFormField;
 use wcf\system\form\builder\field\IPlaceholderFormField;
+use wcf\system\form\builder\field\TAutoFocusFormField;
 use wcf\system\form\builder\field\TDefaultIdFormField;
 use wcf\system\form\builder\field\TImmutableFormField;
 use wcf\system\form\builder\field\TMaximumLengthFormField;
@@ -28,7 +30,8 @@ use wcf\util\UserUtil;
  * @package    WoltLabSuite\Core\System\Form\Builder\Field\User
  * @since      5.2
  */
-class UsernameFormField extends AbstractFormField implements IImmutableFormField, IMaximumLengthFormField, IMinimumLengthFormField, INullableFormField, IPlaceholderFormField {
+class UsernameFormField extends AbstractFormField implements IAutoFocusFormField, IImmutableFormField, IMaximumLengthFormField, IMinimumLengthFormField, INullableFormField, IPlaceholderFormField {
+       use TAutoFocusFormField;
        use TDefaultIdFormField;
        use TImmutableFormField;
        use TMaximumLengthFormField;