TableCellNode::getRowSpan()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 1
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
namespace dokuwiki\plugin\prosemirror\parser;
4
5
class TableCellNode extends Node
6
{
7
    protected $data;
8
9
    /** @var Node[] */
10
    protected $subnodes;
11
12
    public function __construct($data, Node $parent = null)
13
    {
14
        if (empty($data['content'])) {
15
            $data['content'] = [
16
                [
17
                    'type' => 'text',
18
                    'text' => ' ',
19
                ]
20
            ];
21
        }
22
        $this->data = $data;
23
24
        $previousNode = null;
25
        foreach ($data['content'] as $nodeData) {
26
            try {
27
                $newNode = static::getSubNode($nodeData, $this, $previousNode);
28
            } catch (\Throwable $e) {
29
                var_dump($nodeData);
0 ignored issues
show
Security Debugging Code introduced by
var_dump($nodeData) looks like debug code. Are you sure you do not want to remove it?
Loading history...
30
                throw $e;
31
            }
32
            $this->subnodes[] = $newNode;
33
            $previousNode = $newNode;
34
        }
35
    }
36
37
    public function toSyntax()
38
    {
39
        $prefix = '|';
40
        if ($this->isHeaderCell()) {
41
            $prefix = '^';
42
        }
43
        $doc = '';
44
        foreach ($this->subnodes as $subnode) {
45
            $doc .= $subnode->toSyntax();
46
        }
47
        [$paddingLeft, $paddingRight] = $this->calculateAlignmentPadding();
48
        return $prefix . $paddingLeft . trim($doc) . $paddingRight;
49
    }
50
51
    public function isHeaderCell()
52
    {
53
        return $this->data['type'] === 'table_header';
54
    }
55
56
    public function getRowSpan()
57
    {
58
        return $this->data['attrs']['rowspan'];
59
    }
60
61
    public function getColSpan()
62
    {
63
        return $this->data['attrs']['colspan'];
64
    }
65
66
    /**
67
     * Calculate the correct padding to align cell-content left, right or center
68
     *
69
     * @return String[] [left padding, right padding]
70
     */
71
    protected function calculateAlignmentPadding()
72
    {
73
        if (empty($this->data['attrs']['align'])) {
74
            return [' ', ' '];
75
        }
76
        if ($this->data['attrs']['align'] === 'right') {
77
            return ['  ', ' '];
78
        }
79
        if ($this->data['attrs']['align'] === 'center') {
80
            return ['  ', '  '];
81
        }
82
        if ($this->data['attrs']['align'] === 'left') {
83
            return [' ', '  '];
84
        }
85
        return [' ', ' '];
86
    }
87
}
88