Complete transformation to htmx

This commit is contained in:
Caleb Gardner
2024-11-01 04:00:55 -05:00
parent 6965917e76
commit 1061a38c6a
9 changed files with 215 additions and 127 deletions
+5 -52
View File
@@ -1,69 +1,22 @@
package main
import (
"fmt"
"log"
"net/http"
"slices"
"strings"
)
const (
portfolioSelector = "<p>Language Filter: <select id='langSelect' name='langSelect'>%v</select></p>"
portfolioSelectorOption = "<option value='%v'%v>%v</option>"
portfolioTitle = "<h2 class='portfolio-title'>%v</h2>"
portfolioLink = "<p class='portfolio-link'><a href='%v'>%v</a>"
portfolioLanguage = "<p class='portfolio-language'><b>%v</b>: %v</p>"
portfolioTech = "<p class='portfolio-tech'><b>Tech: </b>%v</p>"
portfolioDesc = "<p class='portfolio-description'>%v</p>"
)
func portfolioRequest(w http.ResponseWriter, r *http.Request) {
selectedLang := r.URL.Query().Get("lang")
proj, err := blogApp.Projects(r.Context(), selectedLang)
selectedTech := r.URL.Query().Get("tech")
proj, err := blogApp.Projects(r.Context(), selectedTech)
if err != nil {
log.Println("error getting portfolio projects:", err)
w.WriteHeader(http.StatusInternalServerError)
sendContent(w, r, "Error getting portfolio", "", "")
return
}
aboutMe := "<h1 class='about-me-header'>About Me</h1>"
if me, err := blogApp.AboutMe(r.Context()); err != nil {
aboutMe += "Error getting info about me :("
if r.Header.Get("Hx-Request") == "true" {
w.Write([]byte(proj.FullHTMX(r.Context(), blogApp, selectedTech)))
} else {
aboutMe += authorSection(me)
sendContent(w, r, proj.FullHTMX(r.Context(), blogApp, selectedTech), "Portfolio", "")
}
aboutMe += "<h1 class='my-projects-header' style='margin-bottom:15px'>My Projects</h1>"
langs := make(map[string]struct{})
out := ""
for _, p := range proj {
out += fmt.Sprintf(portfolioTitle, p.Title)
out += fmt.Sprintf(portfolioLink, p.Repository, p.Repository)
for _, l := range p.Languages {
langs[l.Language] = struct{}{}
out += fmt.Sprintf(portfolioLanguage, l.Language, l.Dates)
}
out += fmt.Sprintf(portfolioTech, strings.Join(p.Technologies, ", "))
out += fmt.Sprintf(portfolioDesc, p.Description)
}
langKeys := make([]string, 0, len(langs))
for k := range langs {
langKeys = append(langKeys, k)
}
slices.Sort(langKeys)
var tmp string
if selectedLang == "" {
tmp = fmt.Sprintf(portfolioSelectorOption, "", " selected=true", "All")
} else {
tmp = fmt.Sprintf(portfolioSelectorOption, "", "", "All")
}
for _, k := range langKeys {
if selectedLang == strings.ToLower(k) {
tmp += fmt.Sprintf(portfolioSelectorOption, strings.ToLower(k), " selected=true", k)
} else {
tmp += fmt.Sprintf(portfolioSelectorOption, strings.ToLower(k), "", k)
}
}
out = aboutMe + fmt.Sprintf(portfolioSelector, tmp) + out
sendContent(w, r, out, "Portfolio", "")
}