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}