1c586a422SLeonard Heyman<?php 2c586a422SLeonard Heyman/** 3c586a422SLeonard Heyman * DokuWiki Plugin localopen (Syntax Component) 4c586a422SLeonard Heyman * 5c586a422SLeonard Heyman * @license MIT 6c586a422SLeonard Heyman * @author Leonard Heyman 7c586a422SLeonard Heyman */ 8c586a422SLeonard Heyman 9c586a422SLeonard Heymanclass syntax_plugin_localopen extends \dokuwiki\Extension\SyntaxPlugin 10c586a422SLeonard Heyman{ 11c586a422SLeonard Heyman public function getType() 12c586a422SLeonard Heyman { 13c586a422SLeonard Heyman return 'substition'; 14c586a422SLeonard Heyman } 15c586a422SLeonard Heyman 16c586a422SLeonard Heyman public function getPType() 17c586a422SLeonard Heyman { 18c586a422SLeonard Heyman return 'normal'; 19c586a422SLeonard Heyman } 20c586a422SLeonard Heyman 21c586a422SLeonard Heyman public function getSort() 22c586a422SLeonard Heyman { 23c586a422SLeonard Heyman return 299; 24c586a422SLeonard Heyman } 25c586a422SLeonard Heyman 26c586a422SLeonard Heyman public function connectTo($mode) 27c586a422SLeonard Heyman { 28c586a422SLeonard Heyman $tag = preg_quote($this->getConf('tag'), '/'); 29c586a422SLeonard Heyman 30c586a422SLeonard Heyman $this->Lexer->addSpecialPattern( 31c586a422SLeonard Heyman '\[\[' . $tag . '>[^|\]]+\|[^]]+\]\]', 32c586a422SLeonard Heyman $mode, 33c586a422SLeonard Heyman 'plugin_localopen' 34c586a422SLeonard Heyman ); 35c586a422SLeonard Heyman } 36c586a422SLeonard Heyman 37c586a422SLeonard Heyman public function handle($match, $state, $pos, Doku_Handler $handler) 38c586a422SLeonard Heyman { 39c586a422SLeonard Heyman $tag = preg_quote($this->getConf('tag'), '/'); 40c586a422SLeonard Heyman 41c586a422SLeonard Heyman preg_match('/\[\[' . $tag . '>([^|]+)\|([^]]+)\]\]/i', $match, $matches); 42c586a422SLeonard Heyman 43c586a422SLeonard Heyman $path = str_replace('"', '', $matches[1]); 44c586a422SLeonard Heyman $title = $matches[2]; 45c586a422SLeonard Heyman 46c586a422SLeonard Heyman return [ 47c586a422SLeonard Heyman 'path' => $path, 48c586a422SLeonard Heyman 'title' => $title, 49c586a422SLeonard Heyman ]; 50c586a422SLeonard Heyman } 51c586a422SLeonard Heyman 52c586a422SLeonard Heyman public function render($mode, Doku_Renderer $renderer, $data) 53c586a422SLeonard Heyman { 54c586a422SLeonard Heyman if ($mode !== 'xhtml') return false; 55c586a422SLeonard Heyman 56c586a422SLeonard Heyman $path = $data['path']; 57c586a422SLeonard Heyman $title = hsc($data['title']); 58c586a422SLeonard Heyman 59c586a422SLeonard Heyman $token = $this->getConf('token'); 60c586a422SLeonard Heyman $port = $this->getConf('port'); 61c586a422SLeonard Heyman 62c586a422SLeonard Heyman $url = 'http://127.0.0.1:' . $port . '/open?path=' . rawurlencode($path) . '&token=' . rawurlencode($token); 63c586a422SLeonard Heyman 64c586a422SLeonard Heyman $href = hsc($url); 65c586a422SLeonard Heyman $title_attr = hsc($path); 66c586a422SLeonard Heyman 67*39a9131bSLeonard Heyman $icon = DOKU_BASE . 'lib/plugins/localopen/images/lopen.svg'; 68*39a9131bSLeonard Heyman 69*39a9131bSLeonard Heyman $renderer->doc .= 70*39a9131bSLeonard Heyman '<a class="localopen-link" title="' . $title_attr . '" href="' . $href . '" onclick="fetch(this.href,{mode:\'no-cors\'}); return false;">' . 71*39a9131bSLeonard Heyman '<img src="' . hsc($icon) . '" alt="" class="localopen-icon" /> ' . 72*39a9131bSLeonard Heyman $title . 73*39a9131bSLeonard Heyman '</a>'; 74c586a422SLeonard Heyman 75c586a422SLeonard Heyman return true; 76c586a422SLeonard Heyman } 77c586a422SLeonard Heyman} 78