Passed
Push — master ( 648548...5e4c5e )
by Bruno
08:25
created

RenderableBootstrapvueTrait::editable()   B

Complexity

Conditions 7
Paths 4

Size

Total Lines 33
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 7
eloc 18
c 1
b 0
f 1
nc 4
nop 3
dl 0
loc 33
rs 8.8333
1
<?php declare(strict_types=1);
2
3
namespace Formularium\Frontend\Bootstrapvue;
4
5
use Formularium\Field;
6
use Formularium\Frontend\HTML\Renderable;
7
use Formularium\HTMLNode;
8
9
trait RenderableBootstrapvueTrait
10
{
11
    /**
12
     * Subcall of wrapper editable() from RenderableTrait
13
     *
14
     * @param mixed $value
15
     * @param Field $field
16
     * @param HTMLNode $previous
17
     * @return HTMLNode
18
     */
19
    abstract public function _editable($value, Field $field, HTMLNode $previous): HTMLNode;
20
21
    public function editable($value, Field $field, HTMLNode $previous): HTMLNode
22
    {
23
        /** @var HTMLNode $base */
24
        $base = $this->_editable($value, $field, $previous);
25
26
        $renderable = $field->getRenderables();
27
        $base->setTag('b-form-group');
28
29
        if (array_key_exists(Renderable::LABEL, $renderable)) {
30
            $base->setAttribute('label', $renderable[Renderable::LABEL]);
31
        }
32
        if (array_key_exists(Renderable::COMMENT, $renderable)) {
33
            $base->appendContent(
34
                HTMLNode::factory(
35
                    'b-form-text',
36
                    [],
37
                    $renderable[Renderable::COMMENT]
38
                )
39
            );
40
        }
41
        $base->filter(function ($e) {
42
            if ($e instanceof HTMLNode) {
43
                if ($e->getTag() === 'label') {
44
                    return false;
45
                }
46
                if ($e->getTag() === 'div' && $e->getAttribute('class') === ['formularium-comment']) {
47
                    return false;
48
                }
49
            }
50
            return true;
51
        });
52
53
        return $base;
54
    }
55
}
56