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