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