summaryrefslogtreecommitdiff
path: root/www/wiki/includes/htmlform/HTMLFormElement.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/includes/htmlform/HTMLFormElement.php')
-rw-r--r--www/wiki/includes/htmlform/HTMLFormElement.php65
1 files changed, 65 insertions, 0 deletions
diff --git a/www/wiki/includes/htmlform/HTMLFormElement.php b/www/wiki/includes/htmlform/HTMLFormElement.php
new file mode 100644
index 00000000..2830b9c2
--- /dev/null
+++ b/www/wiki/includes/htmlform/HTMLFormElement.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Allows custom data specific to HTMLFormField to be set for OOUI forms. A matching JS widget
+ * (defined in htmlform.Element.js) picks up the extra config when constructed using OO.ui.infuse().
+ *
+ * Currently only supports passing 'hide-if' data.
+ */
+trait HTMLFormElement {
+
+ protected $hideIf = null;
+ protected $modules = null;
+
+ public function initializeHTMLFormElement( array $config = [] ) {
+ // Properties
+ $this->hideIf = isset( $config['hideIf'] ) ? $config['hideIf'] : null;
+ $this->modules = isset( $config['modules'] ) ? $config['modules'] : [];
+
+ // Initialization
+ if ( $this->hideIf ) {
+ $this->addClasses( [ 'mw-htmlform-hide-if' ] );
+ }
+ if ( $this->modules ) {
+ // JS code must be able to read this before infusing (before OOUI is even loaded),
+ // so we put this in a separate attribute (not with the rest of the config).
+ // And it's not needed anymore after infusing, so we don't put it in JS config at all.
+ $this->setAttributes( [ 'data-mw-modules' => implode( ',', $this->modules ) ] );
+ }
+ $this->registerConfigCallback( function ( &$config ) {
+ if ( $this->hideIf !== null ) {
+ $config['hideIf'] = $this->hideIf;
+ }
+ } );
+ }
+}
+
+class HTMLFormFieldLayout extends OOUI\FieldLayout {
+ use HTMLFormElement;
+
+ public function __construct( $fieldWidget, array $config = [] ) {
+ parent::__construct( $fieldWidget, $config );
+
+ // Traits
+ $this->initializeHTMLFormElement( $config );
+ }
+
+ protected function getJavaScriptClassName() {
+ return 'mw.htmlform.FieldLayout';
+ }
+}
+
+class HTMLFormActionFieldLayout extends OOUI\ActionFieldLayout {
+ use HTMLFormElement;
+
+ public function __construct( $fieldWidget, $buttonWidget = false, array $config = [] ) {
+ parent::__construct( $fieldWidget, $buttonWidget, $config );
+
+ // Traits
+ $this->initializeHTMLFormElement( $config );
+ }
+
+ protected function getJavaScriptClassName() {
+ return 'mw.htmlform.ActionFieldLayout';
+ }
+}