1:  2:  3:  4:  5:  6:  7:  8:  9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: <?php
/**
 * MvcCore
 *
 * This source file is subject to the BSD 3 License
 * For the full copyright and license information, please view
 * the LICENSE.md file that are distributed with this source code.
 *
 * @copyright   Copyright (c) 2016 Tom Flidr (https://github.com/mvccore)
 * @license     https://mvccore.github.io/docs/mvccore/5.0.0/LICENCE.md
 */
namespace MvcCore\Ext\Forms\Fields;
/**
 * Responsibility: init, pre-dispatch and render `<input>` HTML element 
 *                 with `type` attribute `color` to select hexadecimal 
 *                 color with no transparency. `Color` field has it's own 
 *                 validator for hexadecimal color without transparency 
 *                 and leading slash char `#` by default.
 */
class       Color 
extends     \MvcCore\Ext\Forms\Field
implements  \MvcCore\Ext\Forms\Fields\IVisibleField, 
            \MvcCore\Ext\Forms\Fields\ILabel,
            \MvcCore\Ext\Forms\Fields\IDataList {
    use \MvcCore\Ext\Forms\Field\Props\VisibleField;
    use \MvcCore\Ext\Forms\Field\Props\Label;
    use \MvcCore\Ext\Forms\Field\Props\DataList;
    use \MvcCore\Ext\Forms\Field\Props\AutoComplete;
    
    /**
     * Possible value: `color`.
     * @var string
     */
    protected $type = 'color';
    /**
     * Hexadecimal color value with no transparency including leading hash char `#`.
     * Default value - a black color - `#000000`.
     * @var string
     */
    protected $value = '#000000';
    /**
     * Validators: 
     * - `Color` - to validate hexadecimal color with no transparency including leading hash char `#`.
     * @var string[]|\Closure[]
     */
    protected $validators = ['Color'];
    /**
     * This INTERNAL method is called from `\MvcCore\Ext\Form` just before
     * field is naturally rendered. It sets up field for rendering process.
     * Do not use this method event if you don't develop any form field.
     * - Set up field render mode if not defined.
     * - Translate label text if necessary.
     * - Set up tab-index if necessary.
     * @return void
     */
    public function PreDispatch () {
        parent::PreDispatch();
        $this->preDispatchTabIndex();
    }
    /**
     * This INTERNAL method is called from `\MvcCore\Ext\Forms\Field\Rendering` 
     * in rendering process. Do not use this method even if you don't develop any form field.
     * 
     * Render control tag only without label or specific errors.
     * @return string
     */
    public function RenderControl () {
        $attrsStr = $this->renderControlAttrsWithFieldVars([
            'list',
            'autoComplete',
        ]);
        if (!$this->form->GetFormTagRenderingStatus()) 
            $attrsStr .= (strlen($attrsStr) > 0 ? ' ' : '')
                . 'form="' . $this->form->GetId() . '"';
        $formViewClass = $this->form->GetViewClass();
        /** @var $templates \stdClass */
        $templates = static::$templates;
        return $formViewClass::Format($templates->control, [
            'id'        => $this->id,
            'name'      => $this->name,
            'type'      => $this->type,
            'value'     => htmlspecialchars_decode(htmlspecialchars($this->value, ENT_QUOTES), ENT_QUOTES),
            'attrs'     => strlen($attrsStr) > 0 ? ' ' . $attrsStr : '',
        ]);
    }
}