xref: /plugin/diagrams/parser/DiagramsNode.php (revision c949f2b3d2e6bcf98af329b2afe42b867baa2bf6)
18d8f8b26SAnna Dabrowska<?php
28d8f8b26SAnna Dabrowska
38d8f8b26SAnna Dabrowskanamespace dokuwiki\plugin\diagrams\parser;
48d8f8b26SAnna Dabrowska
50ec94f66SAndreas Gohruse dokuwiki\plugin\prosemirror\parser\Node;
68d8f8b26SAnna Dabrowska
7*c949f2b3SAndreas Gohr/**
8*c949f2b3SAndreas Gohr * Represents an embedded diagram
9*c949f2b3SAndreas Gohr *
10*c949f2b3SAndreas Gohr * Note: for mediafile diagrams the image node is reused
11*c949f2b3SAndreas 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
24*c949f2b3SAndreas 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
31*c949f2b3SAndreas 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        }
380ec94f66SAndreas Gohr        $openingTag .= '>';
390ec94f66SAndreas Gohr
403d6886fdSAndreas Gohr        $svg = $this->data['attrs']['url'];
410ec94f66SAndreas Gohr        if (substr($svg, 0, 26) !== 'data:image/svg+xml;base64,') {
420ec94f66SAndreas Gohr            throw new \Exception('bad data uri "' . substr($svg, 0, 26) . '"');
430ec94f66SAndreas Gohr        }
440ec94f66SAndreas Gohr        $svg = base64_decode(substr($svg, 26));
450ec94f66SAndreas Gohr        return $openingTag . $svg . "</diagram>";
460ec94f66SAndreas Gohr    }
478d8f8b26SAnna Dabrowska}
48