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}