Expand   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 43
c 1
b 0
f 0
dl 0
loc 70
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getTitle() 0 3 1
A __construct() 0 4 1
A load() 0 18 3
A attrs() 0 6 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Adf\Node\Block;
6
7
use DH\Adf\Builder\BlockquoteBuilder;
8
use DH\Adf\Builder\BulletListBuilder;
9
use DH\Adf\Builder\CodeblockBuilder;
10
use DH\Adf\Builder\HeadingBuilder;
11
use DH\Adf\Builder\MediaGroupBuilder;
12
use DH\Adf\Builder\MediaSingleBuilder;
13
use DH\Adf\Builder\OrderedListBuilder;
14
use DH\Adf\Builder\PanelBuilder;
15
use DH\Adf\Builder\ParagraphBuilder;
16
use DH\Adf\Builder\RuleBuilder;
17
use DH\Adf\Builder\TableBuilder;
18
use DH\Adf\Builder\TaskListBuilder;
19
use DH\Adf\Node\BlockNode;
20
use DH\Adf\Node\Node;
21
use JsonSerializable;
22
23
class Expand extends BlockNode implements JsonSerializable
24
{
25
    use BlockquoteBuilder;
26
    use BulletListBuilder;
27
    use CodeblockBuilder;
28
    use HeadingBuilder;
29
    use MediaGroupBuilder;
30
    use MediaSingleBuilder;
31
    use OrderedListBuilder;
32
    use PanelBuilder;
33
    use ParagraphBuilder;
34
    use RuleBuilder;
35
    use TableBuilder;
36
    use TaskListBuilder;
37
38
    protected string $type = 'expand';
39
    protected array $allowedContentTypes = [
40
        Blockquote::class,
41
        BulletList::class,
42
        CodeBlock::class,
43
        Heading::class,
44
        MediaGroup::class,
45
        MediaSingle::class,
46
        OrderedList::class,
47
        Panel::class,
48
        Paragraph::class,
49
        Rule::class,
50
        Table::class,
51
        TaskList::class,
52
    ];
53
54
    private ?string $title;
55
56
    public function __construct(string $title, ?BlockNode $parent = null)
57
    {
58
        parent::__construct($parent);
59
        $this->title = $title;
60
    }
61
62
    public static function load(array $data, ?BlockNode $parent = null): self
63
    {
64
        self::checkNodeData(static::class, $data, ['attrs']);
65
        self::checkRequiredKeys(['title'], $data['attrs']);
66
67
        $node = new self($data['attrs']['title'], $parent);
68
69
        // set content if defined
70
        if (\array_key_exists('content', $data)) {
71
            foreach ($data['content'] as $nodeData) {
72
                $class = Node::NODE_MAPPING[$nodeData['type']];
73
                $child = $class::load($nodeData, $node);
74
75
                $node->append($child);
76
            }
77
        }
78
79
        return $node;
80
    }
81
82
    public function getTitle(): ?string
83
    {
84
        return $this->title;
85
    }
86
87
    protected function attrs(): array
88
    {
89
        $attrs = parent::attrs();
90
        $attrs['title'] = $this->title;
91
92
        return $attrs;
93
    }
94
}
95