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