Skip to content

Commit 9bc4835

Browse files
committed
move search to a separate page
1 parent 8738697 commit 9bc4835

File tree

7 files changed

+51
-25
lines changed

7 files changed

+51
-25
lines changed

extensions/search/search.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,31 @@ func (Search) Init() {
2929
}
3030

3131
RequireHTMX()
32-
Get(`/+/search`, searchHandler)
32+
Get(`/+/search`, searchFormHandler)
33+
Get(`/+/search-result`, searchResultHandler)
3334
RegisterWidget("search", 0, searchWidget)
3435
RegisterTemplate(templates, "templates")
3536
}
3637

3738
func searchWidget(Page) template.HTML {
38-
return Partial("search-widget", nil)
39+
return Partial("search", nil)
3940
}
4041

41-
func searchHandler(r Request) Output {
42-
return Render("search-datalist", Locals{
42+
func searchFormHandler(r Request) Output {
43+
return Render("search-form", Locals{
44+
"page": DynamicPage{NameVal: "Create"},
45+
"results": search(r.Context(), r.FormValue("q")),
46+
})
47+
}
48+
49+
func searchResultHandler(r Request) Output {
50+
return Render("search-result", Locals{
4351
"results": search(r.Context(), r.FormValue("q")),
4452
})
4553
}
4654

4755
type searchResult struct {
48-
Page string
56+
Page Page
4957
Line string
5058
}
5159

@@ -61,15 +69,15 @@ func search(ctx context.Context, keyword string) []*searchResult {
6169
match := reg.FindString(p.Name())
6270
if len(match) > 0 {
6371
return &searchResult{
64-
Page: p.Name(),
72+
Page: p,
6573
Line: "Matches the file name",
6674
}
6775
}
6876

6977
match = reg.FindString(string(p.Content()))
7078
if len(match) > 0 {
7179
return &searchResult{
72-
Page: p.Name(),
80+
Page: p,
7381
Line: match,
7482
}
7583
}

extensions/search/templates/search-datalist.html

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1+
{{ template "header" . }}
12
<div class="field has-addons">
23
<div class="control is-expanded">
34
<input type="text"
45
id="newPage"
56
name="q"
6-
hx-get="/+/search"
7+
hx-get="/+/search-result"
78
hx-trigger="keyup delay:0.2s"
8-
hx-target="next"
9-
list="searchResults"
9+
hx-target="#searchResults"
1010
class="input"
1111
placeholder="New/Search..."
1212
onkeyup="if(event.keyCode == 13){ document.location.pathname = this.value }"
1313
autocomplete="off"
14+
autofocus
1415
/>
15-
<datalist id="searchResults"></datalist>
1616
</div>
1717
<div class="control">
1818
<a class="button" onclick="document.location.pathname = document.getElementById('newPage').value">
@@ -21,15 +21,8 @@
2121
</div>
2222
</div>
2323

24-
<script type="application/javascript">
25-
document.addEventListener('selectionchange', function() {
26-
let selection = window.getSelection();
27-
let text = selection.toString();
24+
<aside class="menu">
25+
<div class="menu-list" id="searchResults"></div>
26+
</aside>
2827

29-
if( text.length == 0 ) { return; }
30-
// Ignore selection in the input itself
31-
if( selection.anchorNode.className == 'control is-expanded' ) { return; }
32-
33-
document.getElementById('newPage').value = text;
34-
})
35-
</script>
28+
{{ template "footer" . }}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{{ range .results }}
2+
<div>
3+
<a href="/{{.Page.Name}}">
4+
<strong class="is-block mb-1">
5+
{{ with .Page }}
6+
{{.Emoji}}
7+
{{ $props := properties . }}
8+
{{ with $props.title }} {{ .Value }} {{ else }} {{ .Name }} {{ end }}
9+
{{ end }}
10+
</strong>
11+
{{.Line}}
12+
</a>
13+
</div>
14+
{{ end }}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<a class="button" href="/+/search">
2+
<span>Create</span>
3+
<span class="icon"><i class="fa-solid fa-plus"></i></span>
4+
</a>

helpers.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var helpers = template.FuncMap{
1616
"widgets": RenderWidget,
1717
"commands": Commands,
1818
"quick_commands": QuickCommands,
19+
"isFontAwesome": IsFontAwesome,
1920
"includeJS": includeJS,
2021
"scripts": scripts,
2122
}
@@ -127,3 +128,7 @@ func scripts() template.HTML {
127128

128129
return template.HTML(b.String())
129130
}
131+
132+
func IsFontAwesome(i string) bool {
133+
return strings.HasPrefix(i, "fa")
134+
}

templates/navbar.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
{{- if .page }}
2323
{{- range $i, $a := links .page -}}
2424
<a {{ range $k, $v := .Attrs }}{{$k}}="{{$v}}" {{end}} class="navbar-item">
25+
{{ with .Icon }}
26+
<span class="icon">
27+
{{ if isFontAwesome . }}<i class="{{.}}"></i> {{ else }} {{.}} {{ end }}
28+
</span>
29+
{{ end }}
2530
<span>{{.Name}}</span>
2631
</a>
2732
{{- end -}}

0 commit comments

Comments
 (0)