xref: /plugin/diagrams/parser/DiagramsNode.php (revision 44b3af047f3968d6462bc1e2ab63b998e09b5eef)
18d8f8b26SAnna Dabrowska<?php
28d8f8b26SAnna Dabrowska
38d8f8b26SAnna Dabrowskanamespace dokuwiki\plugin\diagrams\parser;
48d8f8b26SAnna Dabrowska
50ec94f66SAndreas Gohruse dokuwiki\plugin\prosemirror\parser\Node;
68d8f8b26SAnna Dabrowska
7c949f2b3SAndreas Gohr/**
8c949f2b3SAndreas Gohr * Represents an embedded diagram
9c949f2b3SAndreas Gohr *
10c949f2b3SAndreas Gohr * Note: for mediafile diagrams the image node is reused
11c949f2b3SAndreas Gohr */
120ec94f66SAndreas Gohrclass DiagramsNode extends Node
138d8f8b26SAnna Dabrowska{
140ec94f66SAndreas Gohr    /**
150ec94f66SAndreas Gohr     * @var Node
160ec94f66SAndreas Gohr     */
170ec94f66SAndreas Gohr    protected $parent;
180ec94f66SAndreas Gohr
190ec94f66SAndreas Gohr    /**
200ec94f66SAndreas Gohr     * @var mixed
210ec94f66SAndreas Gohr     */
220ec94f66SAndreas Gohr    protected $data;
230ec94f66SAndreas Gohr
24c949f2b3SAndreas Gohr    /** @inheritdoc */
250ec94f66SAndreas Gohr    public function __construct($data, Node $parent)
260ec94f66SAndreas Gohr    {
270ec94f66SAndreas Gohr        $this->parent = &$parent;
280ec94f66SAndreas Gohr        $this->data = $data;
290ec94f66SAndreas Gohr    }
300ec94f66SAndreas Gohr
31c949f2b3SAndreas Gohr    /** @inheritdoc */
320ec94f66SAndreas Gohr    public function toSyntax()
330ec94f66SAndreas Gohr    {
340ec94f66SAndreas Gohr        $openingTag = '<diagram';
350ec94f66SAndreas Gohr        if (!empty($this->data['attrs']['align'])) {
360ec94f66SAndreas Gohr            $openingTag .= ' ' . $this->data['attrs']['align'];
370ec94f66SAndreas Gohr        }
38*44b3af04SAnna Dabrowska        if (!empty($this->data['attrs']['width']) && !empty($this->data['attrs']['height'])) {
39*44b3af04SAnna Dabrowska            $openingTag .= ' ' . $this->data['attrs']['width'] . 'x' . $this->data['attrs']['height'];
40*44b3af04SAnna Dabrowska        }
41*44b3af04SAnna Dabrowska        if (!empty($this->data['attrs']['title'])) {
42*44b3af04SAnna Dabrowska            $openingTag .= ' |' . $this->data['attrs']['title'];
43*44b3af04SAnna Dabrowska        }
440ec94f66SAndreas Gohr        $openingTag .= '>';
450ec94f66SAndreas Gohr
463d6886fdSAndreas Gohr        $svg = $this->data['attrs']['url'];
470ec94f66SAndreas Gohr        if (substr($svg, 0, 26) !== 'data:image/svg+xml;base64,') {
480ec94f66SAndreas Gohr            throw new \Exception('bad data uri "' . substr($svg, 0, 26) . '"');
490ec94f66SAndreas Gohr        }
500ec94f66SAndreas Gohr        $svg = base64_decode(substr($svg, 26));
510ec94f66SAndreas Gohr        return $openingTag . $svg . "</diagram>";
520ec94f66SAndreas Gohr    }
538d8f8b26SAnna Dabrowska}
54