xref: /plugin/localopen/syntax.php (revision c586a42202a4ac598e8abba18b14811c81d6aff8)
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