diff options
author | Přemysl Janouch <p@janouch.name> | 2019-04-18 05:59:13 +0200 |
---|---|---|
committer | Přemysl Janouch <p@janouch.name> | 2019-04-18 05:59:13 +0200 |
commit | 6c6cec62988d5d9ca48d3a23843393ca613a567b (patch) | |
tree | 635e89fa59d08b958937530713d7610bac22b10b | |
parent | cbf867868125ab3ede0c7614c8cf3e405a14bf7d (diff) | |
download | sklad-6c6cec62988d5d9ca48d3a23843393ca613a567b.tar.gz sklad-6c6cec62988d5d9ca48d3a23843393ca613a567b.tar.xz sklad-6c6cec62988d5d9ca48d3a23843393ca613a567b.zip |
sklad: highlight matches in the search
-rw-r--r-- | cmd/sklad/main.go | 15 | ||||
-rw-r--r-- | cmd/sklad/search.tmpl | 4 |
2 files changed, 17 insertions, 2 deletions
diff --git a/cmd/sklad/main.go b/cmd/sklad/main.go index 5f10348..aebb5c1 100644 --- a/cmd/sklad/main.go +++ b/cmd/sklad/main.go @@ -2,6 +2,7 @@ package main import ( "errors" + "html" "html/template" "io" "log" @@ -11,6 +12,7 @@ import ( "os" "path" "path/filepath" + "regexp" "strings" "sync" "time" @@ -355,6 +357,19 @@ var funcMap = template.FuncMap{ "lines": func(s string) int { return strings.Count(s, "\n") + 1 }, + "highlight": func(highlight, s string) template.HTML { + b, last := strings.Builder{}, 0 + for _, m := range regexp.MustCompile( + `(?i:`+regexp.QuoteMeta(highlight)+`)`).FindAllStringIndex(s, -1) { + b.WriteString(html.EscapeString(s[last:m[0]])) + b.WriteString(`<mark>`) + b.WriteString(html.EscapeString(s[m[0]:m[1]])) + b.WriteString(`</mark>`) + last = m[1] + } + b.WriteString(html.EscapeString(s[last:])) + return template.HTML(b.String()) + }, } func main() { diff --git a/cmd/sklad/search.tmpl b/cmd/sklad/search.tmpl index 0c58bf9..b7a890e 100644 --- a/cmd/sklad/search.tmpl +++ b/cmd/sklad/search.tmpl @@ -9,7 +9,7 @@ <section> <header> <h3><a href="series?prefix={{ .Prefix }}">{{ .Prefix }}</a></h3> - <p>{{ .Description }} + <p>{{ .Description | highlight $.Query }} </header> </section> {{ else }} @@ -28,7 +28,7 @@ </h3> </header> {{- if .Description }} - <p>{{ .Description }} + <p>{{ .Description | highlight $.Query }} {{- end }} </section> {{ else }} |