Most everything is implemented, included a state handler and a pretty simple (but workable) system for managing state in HTML. Nice and simple for now. There is still much work to be done, but the rest is simple backend creation and error handling. And then input validation...a nightmare.
76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package handlers
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
const TAG_HTML = `
|
|
<li
|
|
hx-post="/v1/web/state/tags/delete"
|
|
hx-trigger="click"
|
|
hx-target="#tag-list"
|
|
hx-swap="innerHTML"
|
|
hx-include="#tag-list"
|
|
hx-vals='{"target": "%s"}'
|
|
class="flex text-xs items-center bg-blue-100 w-fit px-2 py-1 rounded-full gap-x-1 select-none cursor-pointer hover:bg-blue-200 duration-300">
|
|
× %s
|
|
</li>
|
|
`
|
|
|
|
const TAG_LIST_HTML = `
|
|
<input
|
|
hx-swap-oob="outerHTML"
|
|
type="hidden"
|
|
name="tags"
|
|
id="tags"
|
|
value="%s"
|
|
/>
|
|
`
|
|
|
|
func NewTag(ctx *gin.Context) {
|
|
tag := strings.ToLower(ctx.PostForm("tag"))
|
|
tags := strings.Split(ctx.PostForm("tags"), ",")
|
|
|
|
tags = append([]string{tag}, tags...)
|
|
|
|
var html string
|
|
var cleaned_tags []string
|
|
for _, tag := range tags {
|
|
if tag != "" {
|
|
html += fmt.Sprintf(TAG_HTML, tag, tag)
|
|
|
|
// Ensure that the list provided does not contain blank spaces.
|
|
// This is another measure to ensure this state is bulletproof.
|
|
cleaned_tags = append(cleaned_tags, tag)
|
|
}
|
|
}
|
|
|
|
// Execute OOB swap for the tags
|
|
html += fmt.Sprintf(TAG_LIST_HTML, strings.Join(cleaned_tags, ","))
|
|
|
|
ctx.String(http.StatusOK, html)
|
|
}
|
|
|
|
func DeleteTag(ctx *gin.Context) {
|
|
tags := strings.Split(ctx.PostForm("tags"), ",")
|
|
target := ctx.PostForm("target")
|
|
|
|
var html string
|
|
var new_tags []string
|
|
for _, tag := range tags {
|
|
if tag != target && tag != "" {
|
|
html += fmt.Sprintf(TAG_HTML, tag, tag)
|
|
new_tags = append(new_tags, tag)
|
|
}
|
|
}
|
|
|
|
// Execute OOB swap for the tags
|
|
html += fmt.Sprintf(TAG_LIST_HTML, strings.Join(new_tags, ","))
|
|
|
|
ctx.String(http.StatusOK, html)
|
|
}
|