xref: /plugin/diagrams/action/prosemirror.php (revision 8d8f8b264bf651cfe4995a4a8e09bf6ea6291c37)
1*8d8f8b26SAnna Dabrowska<?php
2*8d8f8b26SAnna Dabrowska
3*8d8f8b26SAnna Dabrowskause dokuwiki\plugin\prosemirror\schema\Node;
4*8d8f8b26SAnna Dabrowska
5*8d8f8b26SAnna Dabrowska/**
6*8d8f8b26SAnna Dabrowska * DokuWiki Plugin diagrams (Action Component)
7*8d8f8b26SAnna Dabrowska *
8*8d8f8b26SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
9*8d8f8b26SAnna Dabrowska * @author  Anna Dabrowska <dabrowska@cosmocode.de>
10*8d8f8b26SAnna Dabrowska */
11*8d8f8b26SAnna Dabrowskaclass action_plugin_diagrams_prosemirror extends \dokuwiki\Extension\ActionPlugin
12*8d8f8b26SAnna Dabrowska{
13*8d8f8b26SAnna Dabrowska
14*8d8f8b26SAnna Dabrowska    /** @inheritDoc */
15*8d8f8b26SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
16*8d8f8b26SAnna Dabrowska    {
17*8d8f8b26SAnna Dabrowska        $controller->register_hook('PROSEMIRROR_RENDER_PLUGIN', 'BEFORE', $this, 'handleRender');
18*8d8f8b26SAnna Dabrowska        $controller->register_hook('PROSEMIRROR_PARSE_UNKNOWN', 'BEFORE', $this, 'handleNode');
19*8d8f8b26SAnna Dabrowska    }
20*8d8f8b26SAnna Dabrowska
21*8d8f8b26SAnna Dabrowska    /**
22*8d8f8b26SAnna Dabrowska     * Event handler for PROSEMIRROR_RENDER_PLUGIN
23*8d8f8b26SAnna Dabrowska     * Renders DokuWiki's instructions into JSON as required by schema
24*8d8f8b26SAnna Dabrowska     *
25*8d8f8b26SAnna Dabrowska     * @param Doku_Event $event Event object
26*8d8f8b26SAnna Dabrowska     * @return void
27*8d8f8b26SAnna Dabrowska     */
28*8d8f8b26SAnna Dabrowska    public function handleRender(Doku_Event $event) {
29*8d8f8b26SAnna Dabrowska        /*
30*8d8f8b26SAnna Dabrowska          $eventData = [
31*8d8f8b26SAnna Dabrowska            'name' => $name,
32*8d8f8b26SAnna Dabrowska            'data' => $data,
33*8d8f8b26SAnna Dabrowska            'state' => $state,
34*8d8f8b26SAnna Dabrowska            'match' => $match,
35*8d8f8b26SAnna Dabrowska            'renderer' => $this,
36*8d8f8b26SAnna Dabrowska        ];*/
37*8d8f8b26SAnna Dabrowska
38*8d8f8b26SAnna Dabrowska        $eventData = $event->data;
39*8d8f8b26SAnna Dabrowska        $imageData = $eventData['data'];
40*8d8f8b26SAnna Dabrowska
41*8d8f8b26SAnna Dabrowska        //check for our data
42*8d8f8b26SAnna Dabrowska        if ($eventData['name'] !== 'diagrams_mediafile') return;
43*8d8f8b26SAnna Dabrowska
44*8d8f8b26SAnna Dabrowska        $event->preventDefault();
45*8d8f8b26SAnna Dabrowska
46*8d8f8b26SAnna Dabrowska        $node = new Node('diagrams');
47*8d8f8b26SAnna Dabrowska        $node->attr('id', $imageData['src']);
48*8d8f8b26SAnna Dabrowska        $node->attr('src', $imageData['url']);
49*8d8f8b26SAnna Dabrowska        $node->attr('title', $imageData['title']);
50*8d8f8b26SAnna Dabrowska        $node->attr('width', $imageData['width']);
51*8d8f8b26SAnna Dabrowska        $node->attr('height', $imageData['height']);
52*8d8f8b26SAnna Dabrowska        $node->attr('align', $imageData['align']);
53*8d8f8b26SAnna Dabrowska
54*8d8f8b26SAnna Dabrowska        $event->data['renderer']->addToNodestack($node);
55*8d8f8b26SAnna Dabrowska    }
56*8d8f8b26SAnna Dabrowska
57*8d8f8b26SAnna Dabrowska    /**
58*8d8f8b26SAnna Dabrowska     * Event handler for PROSEMIRROR_PARSE_UNKNOWN
59*8d8f8b26SAnna Dabrowska     * Translate the JSON from Prosemirror back to DokuWiki's syntax
60*8d8f8b26SAnna Dabrowska     *
61*8d8f8b26SAnna Dabrowska     * @param Doku_Event $event
62*8d8f8b26SAnna Dabrowska     * @return void
63*8d8f8b26SAnna Dabrowska     */
64*8d8f8b26SAnna Dabrowska    public function handleNode(Doku_Event $event)
65*8d8f8b26SAnna Dabrowska    {
66*8d8f8b26SAnna Dabrowska        /*
67*8d8f8b26SAnna Dabrowska          $eventData = [
68*8d8f8b26SAnna Dabrowska            'node' => $node,
69*8d8f8b26SAnna Dabrowska            'parent' => $parent,
70*8d8f8b26SAnna Dabrowska            'previous' => $previous,
71*8d8f8b26SAnna Dabrowska            'newNode' => null,
72*8d8f8b26SAnna Dabrowska        ];*/
73*8d8f8b26SAnna Dabrowska
74*8d8f8b26SAnna Dabrowska        // check for our node type
75*8d8f8b26SAnna Dabrowska        if ($event->data['node']['type'] !== 'diagrams') return;
76*8d8f8b26SAnna Dabrowska
77*8d8f8b26SAnna Dabrowska        $event->preventDefault();
78*8d8f8b26SAnna Dabrowska
79*8d8f8b26SAnna Dabrowska        $node = new \dokuwiki\plugin\diagrams\parser\DiagramsNode($event->data['node'], $event->data['parent']);
80*8d8f8b26SAnna Dabrowska        $event->data['newNode'] = $node;
81*8d8f8b26SAnna Dabrowska    }
82*8d8f8b26SAnna Dabrowska}
83