include-search.go (792B)
1 package main 2 3 import ( 4 "fmt" 5 "net/http" 6 "strings" 7 ) 8 9 func searchHandler(w http.ResponseWriter, r *http.Request) { 10 query := strings.TrimSpace(r.URL.Query().Get("q")) 11 page := pageFromRequest(r) 12 perPage := perPageFromConfig(50) 13 14 var files []File 15 var total int 16 var searchTitle string 17 18 if query != "" { 19 var err error 20 files, total, err = getSearchResultsPaginated(query, page, perPage) 21 if err != nil { 22 renderError(w, "Search failed: "+err.Error(), http.StatusInternalServerError) 23 return 24 } 25 searchTitle = fmt.Sprintf("Search Results for: %s", query) 26 } else { 27 searchTitle = "Search Files" 28 } 29 30 pageData := buildPageDataWithPagination(searchTitle, files, page, total, perPage, r) 31 pageData.Query = query 32 pageData.Files = files 33 renderTemplate(w, "search.html", pageData) 34 }