From: Mischa POSLAWSKY Date: Fri, 26 Oct 2018 18:42:47 +0000 (+0200) Subject: search: distinct url suggestion results X-Git-Tag: v3.8~18 X-Git-Url: http://git.shiar.net/minimedit.git/commitdiff_plain/e6e54fe22ae87eb9487595b3e6afa5b80c12e3f1 search: distinct url suggestion results Option to select either filename suggestion or contents matches, displayed separately. --- diff --git a/404.html b/404.html index 04acb33..88fef2a 100644 --- a/404.html +++ b/404.html @@ -2,6 +2,7 @@

De gevraagde pagina [[url]] bestaat niet.

-

Misschien is de gewenste inhoud hier te vinden:

+

Misschien bedoelde je [[search suggest=1 limit=1]], + of is het gewenste resultaat te vinden door op inhoud te zoeken:

-[[search]] +[[search limit=10]] diff --git a/search.php b/search.php index 2f093c9..0b15607 100644 --- a/search.php +++ b/search.php @@ -5,31 +5,27 @@ $query = @$_REQUEST['q'] ?: $Args ?: $Page; if (!trim($query, '/')) return; -$cmd = "git grep -li -- ".escapeshellarg($query).$path; -exec($cmd, $results); -if (count($results) > $limit) { - shuffle($results); - array_splice($results, $limit); -} +if (!empty($Place['suggest'])) { + $cmd = "git ls-files -- $path"; + exec($cmd, $ls); + if (!$ls) { + die("fout bij zoeken van bestanden"); + } -$cmd = "git ls-files -- $path"; -exec($cmd, $ls); -if ($ls) { # order files by similarity to query $ls = array_combine($ls, array_map(function ($row) use ($query) { $row = preg_replace('{(?:^|/)index\.html$}', '', $row); return similar_text($row, $query) - strlen($row) / 8; }, $ls)); arsort($ls); - - # prepend best match, replace unless duplicate - array_unshift($results, key($ls)); - $results = array_unique($results); - array_splice($results, $limit); + $results = array_keys($ls); } - -elseif (!$results) { - $results = ['index.html']; +else { + $cmd = "git grep -li -- ".escapeshellarg($query).$path; + exec($cmd, $results); + if (count($results) > $limit) { + shuffle($results); // avoid alphabetical top set + } } if (isset($Place['verbose'])) { @@ -40,9 +36,23 @@ if (isset($Place['verbose'])) { } require_once('nieuws.inc.php'); -print '\n";