mirror of https://git.jolheiser.com/ugit.git
64 lines
1.9 KiB
Plaintext
64 lines
1.9 KiB
Plaintext
package html
|
|
|
|
import "fmt"
|
|
import "go.jolheiser.com/ugit/internal/git"
|
|
|
|
type SearchContext struct {
|
|
BaseContext
|
|
RepoHeaderComponentContext
|
|
Results []git.GrepResult
|
|
}
|
|
|
|
func (s SearchContext) DedupeResults() [][]git.GrepResult {
|
|
var (
|
|
results [][]git.GrepResult
|
|
currentFile string
|
|
)
|
|
var idx int
|
|
for _, result := range s.Results {
|
|
if result.File == currentFile {
|
|
results[idx-1] = append(results[idx-1], result)
|
|
continue
|
|
}
|
|
results = append(results, []git.GrepResult{result})
|
|
currentFile = result.File
|
|
idx++
|
|
}
|
|
|
|
return results
|
|
}
|
|
|
|
templ RepoSearch(sc SearchContext) {
|
|
@base(sc.BaseContext) {
|
|
@repoHeaderComponent(sc.RepoHeaderComponentContext)
|
|
for _, results := range sc.DedupeResults() {
|
|
@repoSearchResult(sc.RepoHeaderComponentContext.Name, sc.RepoHeaderComponentContext.Ref, results)
|
|
}
|
|
if len(sc.DedupeResults()) == 0 {
|
|
<p class="text-text mt-5 text-lg">No results</p>
|
|
}
|
|
}
|
|
<script>
|
|
const search = new URLSearchParams(window.location.search).get("q");
|
|
if (search !== "") document.querySelector("#search").value = search;
|
|
</script>
|
|
}
|
|
|
|
templ repoSearchResult(repo, ref string, results []git.GrepResult) {
|
|
<div class="text-text mt-5"><a class="underline decoration-text/50 decoration-dashed hover:decoration-solid" href={ templ.SafeURL(fmt.Sprintf("/%s/tree/%s/%s#L%d", repo, ref, results[0].File, results[0].Line)) }>{ results[0].File }</a></div>
|
|
<div class="code">
|
|
@templ.Raw(results[0].Content)
|
|
</div>
|
|
if len(results) > 1 {
|
|
<details class="text-text cursor-pointer">
|
|
<summary>{ fmt.Sprintf("%d ", len(results[1:])) }more</summary>
|
|
for _, result := range results[1:] {
|
|
<div class="text-text mt-5 ml-5"><a class="underline decoration-text/50 decoration-dashed hover:decoration-solid" href={ templ.SafeURL(fmt.Sprintf("/%s/tree/%s/%s#L%d", repo, ref, result.File, result.Line)) }>{ results[0].File }</a></div>
|
|
<div class="code ml-5">
|
|
@templ.Raw(result.Content)
|
|
</div>
|
|
}
|
|
</details>
|
|
}
|
|
}
|