1<?php 2 3namespace OOUI; 4 5/** 6 * Layout made of a field, button and optional label. 7 */ 8class ActionFieldLayout extends FieldLayout { 9 10 /** 11 * Button widget to be laid out. 12 * 13 * @var Widget 14 */ 15 protected $buttonWidget; 16 17 /** 18 * @param Widget $fieldWidget Field widget 19 * @param ButtonWidget|ButtonInputWidget $buttonWidget Field widget 20 * @param array $config Configuration options 21 * @suppress PhanTypeMismatchDefault Overloaded method 22 */ 23 public function __construct( $fieldWidget, $buttonWidget = false, array $config = [] ) { 24 // Allow passing positional parameters inside the config array 25 if ( is_array( $fieldWidget ) && isset( $fieldWidget['fieldWidget'] ) ) { 26 $config = $fieldWidget; 27 $fieldWidget = $config['fieldWidget']; 28 $buttonWidget = $config['buttonWidget']; 29 } 30 31 // Parent constructor 32 parent::__construct( $fieldWidget, $config ); 33 34 // Properties 35 $this->buttonWidget = $buttonWidget; 36 $this->button = new Tag( 'span' ); 37 $this->input = $this->isFieldInline() ? new Tag( 'span' ) : new Tag( 'div' ); 38 39 // Initialization 40 $this->addClasses( [ 'oo-ui-actionFieldLayout' ] ); 41 $this->button 42 ->addClasses( [ 'oo-ui-actionFieldLayout-button' ] ) 43 ->appendContent( $this->buttonWidget ); 44 $this->input 45 ->addClasses( [ 'oo-ui-actionFieldLayout-input' ] ) 46 ->appendContent( $this->fieldWidget ); 47 $this->field 48 ->clearContent() 49 ->appendContent( $this->input, $this->button ); 50 } 51 52 public function getConfig( &$config ) { 53 $config['buttonWidget'] = $this->buttonWidget; 54 return parent::getConfig( $config ); 55 } 56} 57