Skip to content
Snippets Groups Projects
Select Git revision
  • dfa4e81e668ab8537bab14af9a6540b74b889174
  • master default protected
  • fix/deprecated_functions
  • devel
  • feat/translations
  • feat/upgrade_to_pro_url
  • feat/lang
  • bugfix/require-interface
  • bugfix/require-once-error
  • feature/activation-hooks
  • feature/template-loader
  • feature/template-renderer
  • feature/plugin-activation
  • feature/hookable-object
  • feature/builder-pattern
  • 2.1.2
  • 2.1.1
  • 2.1.0
  • 2.0.0
  • 2.0.0-beta1
  • 1.4.4
  • 1.4.3
  • 1.4.2
  • 1.4.1
  • 1.4
  • 1.3.3
  • 1.3.2
  • 1.3.1
  • 1.3.0
  • 1.2.0
  • 1.1
  • 1.0
32 results

bootstrap.php

Blame
  • HtmlAttributes.php 1.89 KiB
    <?php
    
    namespace WPDesk\Forms\Field\Traits;
    
    /**
     * Implementation of HTML attributes like id, name, action etc.
     *
     * @package WPDesk\Forms\Field\Traits
     */
    trait HtmlAttributes {
    
    	/** @var array{placeholder: string, name: string, id: string, class: string[], readonly: bool, multiple: bool, disabled: bool, required: bool, method: string, action: string} */
    	protected $attributes = [
    		'placeholder' => '',
    		'name'        => '',
    		'id'          => '',
    		'class'       => [],
    		'action'      => '',
    		'method'      => 'POST',
    		'readonly'    => false,
    		'multiple'    => false,
    		'disabled'    => false,
    		'required'    => false,
    	];
    
    	/**
    	 * Get list of all attributes except given.
    	 *
    	 * @param string[] $except
    	 *
    	 * @return array<string[]|string|bool>
    	 */
    	final public function get_attributes( array $except = [ 'name' ] ): array {
    		return array_filter(
    			$this->attributes,
    			static function ( $key ) use ( $except ) {
    				return ! in_array( $key, $except, true );
    			},
    			ARRAY_FILTER_USE_KEY
    		);
    	}
    
    	/**
    	 * @param string $name
    	 * @param string[]|string|bool $value
    	 *
    	 * @return \WPDesk\Forms\Field|\WPDesk\Forms\Form
    	 */
    	final public function set_attribute( string $name, $value ) {
    		$this->attributes[ $name ] = $value;
    
    		return $this;
    	}
    
    	/**
    	 * @return \WPDesk\Forms\Field|\WPDesk\Forms\Form
    	 */
    	final public function unset_attribute( string $name ) {
    		unset( $this->attributes[ $name ] );
    
    		return $this;
    	}
    
    	final public function is_attribute_set( string $name ): bool {
    		return ! empty( $this->attributes[ $name ] );
    	}
    
    	final public function get_attribute( string $name, string $default = null ): string {
    		if ( is_array( $this->attributes[ $name ] ) ) {
    			// Be aware of coercing - if implode returns string(0) '', then return $default value.
    			return implode( ' ', $this->attributes[ $name ] ) ?: $default ?? '';
    		}
    		return (string) $this->attributes[ $name ] ?? $default ?? '';
    	}
    }