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