84 lines
1.7 KiB
Go
84 lines
1.7 KiB
Go
package site
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/samber/lo"
|
|
datastar "github.com/starfederation/datastar/sdk/go"
|
|
"github.com/zeebo/xxh3"
|
|
)
|
|
|
|
func setupExamplesMergeOptions(examplesRouter chi.Router) error {
|
|
examplesRouter.Get("/merge_options/reset", func(w http.ResponseWriter, r *http.Request) {
|
|
sse := datastar.NewSSE(w, r)
|
|
sse.MergeFragmentTempl(mergeOptionsView())
|
|
})
|
|
|
|
brewerColorsBG := []string{
|
|
"#a6cee3",
|
|
"#1f78b4",
|
|
"#b2df8a",
|
|
"#33a02c",
|
|
"#fb9a99",
|
|
"#e31a1c",
|
|
"#fdbf6f",
|
|
"#ff7f00",
|
|
"#cab2d6",
|
|
"#6a3d9a",
|
|
"#ffff99",
|
|
"#b15928",
|
|
}
|
|
|
|
brewrColorsFG := []string{
|
|
"black",
|
|
"white",
|
|
"black",
|
|
"black",
|
|
"black",
|
|
"white",
|
|
"black",
|
|
"black",
|
|
"black",
|
|
"white",
|
|
"black",
|
|
"white",
|
|
}
|
|
|
|
examplesRouter.Get("/merge_options/{mergeMode}", func(w http.ResponseWriter, r *http.Request) {
|
|
mergeModeRaw := chi.URLParam(r, "mergeMode")
|
|
|
|
sse := datastar.NewSSE(w, r)
|
|
|
|
switch mergeModeRaw {
|
|
case "":
|
|
http.Error(w, "missing merge mode", http.StatusBadRequest)
|
|
return
|
|
case "delete":
|
|
sse.RemoveFragments("#target")
|
|
return
|
|
default:
|
|
mergeMode, err := datastar.FragmentMergeTypeFromString(mergeModeRaw)
|
|
if err != nil {
|
|
sse.ConsoleError(err)
|
|
return
|
|
}
|
|
|
|
if !lo.Contains(datastar.ValidFragmentMergeTypes, mergeMode) {
|
|
http.Error(w, "invalid merge mode", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
idx := lo.IndexOf(datastar.ValidFragmentMergeTypes, mergeMode)
|
|
now := time.Now().UTC().Format(time.RFC3339)
|
|
h := fmt.Sprint(xxh3.HashString(now))
|
|
frag := mergeOptionsViewUpdate(brewerColorsBG[idx], brewrColorsFG[idx], h)
|
|
sse.MergeFragmentTempl(frag, datastar.WithMergeMode(mergeMode))
|
|
}
|
|
})
|
|
|
|
return nil
|
|
}
|