xref: /plugin/fuzzysearch/syntax/search.php (revision 66fcc8eae76a77d88286dc2434b78514d875fb8c)
1*66fcc8eaSedwardlab<?php
2*66fcc8eaSedwardlabif (!defined('DOKU_INC')) die();
3*66fcc8eaSedwardlab
4*66fcc8eaSedwardlabclass syntax_plugin_fuzzysearch_search extends DokuWiki_Syntax_Plugin {
5*66fcc8eaSedwardlab    public function getType() { return 'substition'; }
6*66fcc8eaSedwardlab    public function getSort() { return 150; }
7*66fcc8eaSedwardlab    public function connectTo($mode) {
8*66fcc8eaSedwardlab        $this->Lexer->addSpecialPattern('~~FUZZYSEARCH~~', $mode, 'plugin_fuzzysearch_search');
9*66fcc8eaSedwardlab    }
10*66fcc8eaSedwardlab    public function handle($match, $state, $pos, Doku_Handler $handler) {
11*66fcc8eaSedwardlab        return ['type' => 'fuzzysearch'];
12*66fcc8eaSedwardlab    }
13*66fcc8eaSedwardlab    public function render($mode, Doku_Renderer $renderer, $data) {
14*66fcc8eaSedwardlab        if ($mode !== 'xhtml') return false;
15*66fcc8eaSedwardlab        if ($data['type'] === 'fuzzysearch') {
16*66fcc8eaSedwardlab            $renderer->doc .= '<div id="fuzzysearch-container">';
17*66fcc8eaSedwardlab            $renderer->doc .= '<input type="text" id="fuzzysearch-input" class="fuzzysearch-input" placeholder="Search pages..." />';
18*66fcc8eaSedwardlab            $renderer->doc .= '<ul id="fuzzysearch-results" class="fuzzysearch-results"></ul>';
19*66fcc8eaSedwardlab            $renderer->doc .= '</div>';
20*66fcc8eaSedwardlab            static $assets_added = false;
21*66fcc8eaSedwardlab            if (!$assets_added) {
22*66fcc8eaSedwardlab                $renderer->doc .= '<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>';
23*66fcc8eaSedwardlab                $assets_added = true;
24*66fcc8eaSedwardlab            }
25*66fcc8eaSedwardlab        }
26*66fcc8eaSedwardlab        return true;
27*66fcc8eaSedwardlab    }
28*66fcc8eaSedwardlab}