tag colors
Some checks failed
Go / build (push) Has been cancelled

This commit is contained in:
2025-04-14 00:38:23 +02:00
parent 9d2819cac4
commit 821f4e526f
5 changed files with 527 additions and 14 deletions

View File

@@ -535,6 +535,7 @@ func (rc *shopItemController) DeleteItemHandler(c *gin.Context) {
func (rc *shopItemController) TagHandler(ctx *gin.Context) { func (rc *shopItemController) TagHandler(ctx *gin.Context) {
name := ctx.PostForm("name") name := ctx.PostForm("name")
color := ctx.PostForm("color")
action := ctx.PostForm("action") action := ctx.PostForm("action")
tag, err := repositories.Tags.GetById(ctx.Param("id")) tag, err := repositories.Tags.GetById(ctx.Param("id"))
@@ -547,6 +548,7 @@ func (rc *shopItemController) TagHandler(ctx *gin.Context) {
if action == "update" { if action == "update" {
tag.Name = name tag.Name = name
tag.Color = color
tag, err = repositories.Tags.Update(tag) tag, err = repositories.Tags.Update(tag)
if err != nil { if err != nil {

View File

@@ -2,22 +2,51 @@ package models
import ( import (
"fmt" "fmt"
"gorm.io/gorm"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"gorm.io/gorm"
"math/rand"
) )
type Tag struct { type Tag struct {
gorm.Model gorm.Model
Name string `json:"name" binding:"required" gorm:"not null"` Name string `json:"name" binding:"required" gorm:"not null"`
Color string `json:"color" binding:"required" gorm:"default:pink"`
ShopItems []ShopItem `gorm:"many2many:item_tags;"` ShopItems []ShopItem `gorm:"many2many:item_tags;"`
} }
func NewTag(ctx *gin.Context) (Tag, error) { func NewTag(ctx *gin.Context) (Tag, error) {
colors := []string{
"red",
"orange",
"amber",
"yellow",
"lime",
"green",
"emerald",
"teal",
"cyan",
"sky",
"blue",
"indigo",
"violet",
"purple",
"fuchsia",
"pink",
"rose",
"slate",
"gray",
"zinc",
"neutral",
"stone",
}
n := rand.Int() % len(colors)
name := ctx.PostForm("name") name := ctx.PostForm("name")
// Convert the price string to float64 // Convert the price string to float64
tag := Tag{ tag := Tag{
Name: name, Name: name,
Color: colors[n],
} }
if name == "" { if name == "" {
@@ -27,14 +56,13 @@ func NewTag(ctx *gin.Context) (Tag, error) {
return tag, nil return tag, nil
} }
func NewTagByJson(ctx *gin.Context) (Tag, error) { func NewTagByJson(ctx *gin.Context) (Tag, error) {
var tag Tag var tag Tag
err := ctx.ShouldBindJSON(&tag) err := ctx.ShouldBindJSON(&tag)
if err != nil { if err != nil {
return Tag{}, err return Tag{}, err
} }
return tag, nil return tag, nil
} }

View File

@@ -574,10 +574,6 @@ video {
position: relative; position: relative;
} }
.inset-0 {
inset: 0px;
}
.inset-y-0 { .inset-y-0 {
top: 0px; top: 0px;
bottom: 0px; bottom: 0px;
@@ -634,6 +630,10 @@ video {
margin-bottom: 2rem; margin-bottom: 2rem;
} }
.me-2 {
margin-inline-end: 0.5rem;
}
.ml-2 { .ml-2 {
margin-left: 0.5rem; margin-left: 0.5rem;
} }
@@ -924,6 +924,10 @@ video {
border-radius: 0.375rem; border-radius: 0.375rem;
} }
.rounded-sm {
border-radius: 0.125rem;
}
.rounded-l-md { .rounded-l-md {
border-top-left-radius: 0.375rem; border-top-left-radius: 0.375rem;
border-bottom-left-radius: 0.375rem; border-bottom-left-radius: 0.375rem;
@@ -959,6 +963,21 @@ video {
border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
} }
.bg-amber-100 {
--tw-bg-opacity: 1;
background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
}
.bg-amber-900 {
--tw-bg-opacity: 1;
background-color: rgb(120 53 15 / var(--tw-bg-opacity, 1));
}
.bg-blue-100 {
--tw-bg-opacity: 1;
background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));
}
.bg-blue-600 { .bg-blue-600 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
@@ -969,6 +988,36 @@ video {
background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1)); background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));
} }
.bg-cyan-100 {
--tw-bg-opacity: 1;
background-color: rgb(207 250 254 / var(--tw-bg-opacity, 1));
}
.bg-cyan-900 {
--tw-bg-opacity: 1;
background-color: rgb(22 78 99 / var(--tw-bg-opacity, 1));
}
.bg-emerald-100 {
--tw-bg-opacity: 1;
background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
}
.bg-emerald-900 {
--tw-bg-opacity: 1;
background-color: rgb(6 78 59 / var(--tw-bg-opacity, 1));
}
.bg-fuchsia-100 {
--tw-bg-opacity: 1;
background-color: rgb(250 232 255 / var(--tw-bg-opacity, 1));
}
.bg-fuchsia-900 {
--tw-bg-opacity: 1;
background-color: rgb(112 26 117 / var(--tw-bg-opacity, 1));
}
.bg-gray-100 { .bg-gray-100 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
@@ -999,16 +1048,91 @@ video {
background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
} }
.bg-green-100 {
--tw-bg-opacity: 1;
background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));
}
.bg-green-600 { .bg-green-600 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));
} }
.bg-green-900 {
--tw-bg-opacity: 1;
background-color: rgb(20 83 45 / var(--tw-bg-opacity, 1));
}
.bg-indigo-100 {
--tw-bg-opacity: 1;
background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));
}
.bg-indigo-600 { .bg-indigo-600 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1)); background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));
} }
.bg-indigo-900 {
--tw-bg-opacity: 1;
background-color: rgb(49 46 129 / var(--tw-bg-opacity, 1));
}
.bg-lime-100 {
--tw-bg-opacity: 1;
background-color: rgb(236 252 203 / var(--tw-bg-opacity, 1));
}
.bg-lime-900 {
--tw-bg-opacity: 1;
background-color: rgb(54 83 20 / var(--tw-bg-opacity, 1));
}
.bg-neutral-100 {
--tw-bg-opacity: 1;
background-color: rgb(245 245 245 / var(--tw-bg-opacity, 1));
}
.bg-neutral-900 {
--tw-bg-opacity: 1;
background-color: rgb(23 23 23 / var(--tw-bg-opacity, 1));
}
.bg-orange-100 {
--tw-bg-opacity: 1;
background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));
}
.bg-orange-900 {
--tw-bg-opacity: 1;
background-color: rgb(124 45 18 / var(--tw-bg-opacity, 1));
}
.bg-pink-100 {
--tw-bg-opacity: 1;
background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1));
}
.bg-pink-900 {
--tw-bg-opacity: 1;
background-color: rgb(131 24 67 / var(--tw-bg-opacity, 1));
}
.bg-purple-100 {
--tw-bg-opacity: 1;
background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));
}
.bg-purple-900 {
--tw-bg-opacity: 1;
background-color: rgb(88 28 135 / var(--tw-bg-opacity, 1));
}
.bg-red-100 {
--tw-bg-opacity: 1;
background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
}
.bg-red-800 { .bg-red-800 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(153 27 27 / var(--tw-bg-opacity, 1)); background-color: rgb(153 27 27 / var(--tw-bg-opacity, 1));
@@ -1019,11 +1143,91 @@ video {
background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1)); background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1));
} }
.bg-rose-100 {
--tw-bg-opacity: 1;
background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));
}
.bg-rose-900 {
--tw-bg-opacity: 1;
background-color: rgb(136 19 55 / var(--tw-bg-opacity, 1));
}
.bg-sky-100 {
--tw-bg-opacity: 1;
background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1));
}
.bg-sky-900 {
--tw-bg-opacity: 1;
background-color: rgb(12 74 110 / var(--tw-bg-opacity, 1));
}
.bg-slate-100 {
--tw-bg-opacity: 1;
background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
}
.bg-slate-900 {
--tw-bg-opacity: 1;
background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));
}
.bg-stone-100 {
--tw-bg-opacity: 1;
background-color: rgb(245 245 244 / var(--tw-bg-opacity, 1));
}
.bg-stone-900 {
--tw-bg-opacity: 1;
background-color: rgb(28 25 23 / var(--tw-bg-opacity, 1));
}
.bg-teal-100 {
--tw-bg-opacity: 1;
background-color: rgb(204 251 241 / var(--tw-bg-opacity, 1));
}
.bg-teal-900 {
--tw-bg-opacity: 1;
background-color: rgb(19 78 74 / var(--tw-bg-opacity, 1));
}
.bg-violet-100 {
--tw-bg-opacity: 1;
background-color: rgb(237 233 254 / var(--tw-bg-opacity, 1));
}
.bg-violet-900 {
--tw-bg-opacity: 1;
background-color: rgb(76 29 149 / var(--tw-bg-opacity, 1));
}
.bg-white { .bg-white {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
} }
.bg-yellow-100 {
--tw-bg-opacity: 1;
background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));
}
.bg-yellow-900 {
--tw-bg-opacity: 1;
background-color: rgb(113 63 18 / var(--tw-bg-opacity, 1));
}
.bg-zinc-100 {
--tw-bg-opacity: 1;
background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));
}
.bg-zinc-900 {
--tw-bg-opacity: 1;
background-color: rgb(24 24 27 / var(--tw-bg-opacity, 1));
}
.fill-red-50 { .fill-red-50 {
fill: #fef2f2; fill: #fef2f2;
} }
@@ -1058,6 +1262,11 @@ video {
padding-right: 0.5rem; padding-right: 0.5rem;
} }
.px-2\.5 {
padding-left: 0.625rem;
padding-right: 0.625rem;
}
.px-3 { .px-3 {
padding-left: 0.75rem; padding-left: 0.75rem;
padding-right: 0.75rem; padding-right: 0.75rem;
@@ -1078,6 +1287,11 @@ video {
padding-right: 1.5rem; padding-right: 1.5rem;
} }
.py-0\.5 {
padding-top: 0.125rem;
padding-bottom: 0.125rem;
}
.py-1\.5 { .py-1\.5 {
padding-top: 0.375rem; padding-top: 0.375rem;
padding-bottom: 0.375rem; padding-bottom: 0.375rem;
@@ -1241,11 +1455,61 @@ video {
letter-spacing: -0.025em; letter-spacing: -0.025em;
} }
.text-amber-300 {
--tw-text-opacity: 1;
color: rgb(252 211 77 / var(--tw-text-opacity, 1));
}
.text-amber-800 {
--tw-text-opacity: 1;
color: rgb(146 64 14 / var(--tw-text-opacity, 1));
}
.text-black { .text-black {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(0 0 0 / var(--tw-text-opacity, 1)); color: rgb(0 0 0 / var(--tw-text-opacity, 1));
} }
.text-blue-300 {
--tw-text-opacity: 1;
color: rgb(147 197 253 / var(--tw-text-opacity, 1));
}
.text-blue-800 {
--tw-text-opacity: 1;
color: rgb(30 64 175 / var(--tw-text-opacity, 1));
}
.text-cyan-300 {
--tw-text-opacity: 1;
color: rgb(103 232 249 / var(--tw-text-opacity, 1));
}
.text-cyan-800 {
--tw-text-opacity: 1;
color: rgb(21 94 117 / var(--tw-text-opacity, 1));
}
.text-emerald-300 {
--tw-text-opacity: 1;
color: rgb(110 231 183 / var(--tw-text-opacity, 1));
}
.text-emerald-800 {
--tw-text-opacity: 1;
color: rgb(6 95 70 / var(--tw-text-opacity, 1));
}
.text-fuchsia-300 {
--tw-text-opacity: 1;
color: rgb(240 171 252 / var(--tw-text-opacity, 1));
}
.text-fuchsia-800 {
--tw-text-opacity: 1;
color: rgb(134 25 143 / var(--tw-text-opacity, 1));
}
.text-gray-300 { .text-gray-300 {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity, 1)); color: rgb(209 213 219 / var(--tw-text-opacity, 1));
@@ -1276,16 +1540,86 @@ video {
color: rgb(17 24 39 / var(--tw-text-opacity, 1)); color: rgb(17 24 39 / var(--tw-text-opacity, 1));
} }
.text-green-300 {
--tw-text-opacity: 1;
color: rgb(134 239 172 / var(--tw-text-opacity, 1));
}
.text-green-500 { .text-green-500 {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(34 197 94 / var(--tw-text-opacity, 1)); color: rgb(34 197 94 / var(--tw-text-opacity, 1));
} }
.text-green-800 {
--tw-text-opacity: 1;
color: rgb(22 101 52 / var(--tw-text-opacity, 1));
}
.text-indigo-300 {
--tw-text-opacity: 1;
color: rgb(165 180 252 / var(--tw-text-opacity, 1));
}
.text-indigo-600 { .text-indigo-600 {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(79 70 229 / var(--tw-text-opacity, 1)); color: rgb(79 70 229 / var(--tw-text-opacity, 1));
} }
.text-indigo-800 {
--tw-text-opacity: 1;
color: rgb(55 48 163 / var(--tw-text-opacity, 1));
}
.text-lime-300 {
--tw-text-opacity: 1;
color: rgb(190 242 100 / var(--tw-text-opacity, 1));
}
.text-lime-800 {
--tw-text-opacity: 1;
color: rgb(63 98 18 / var(--tw-text-opacity, 1));
}
.text-neutral-300 {
--tw-text-opacity: 1;
color: rgb(212 212 212 / var(--tw-text-opacity, 1));
}
.text-neutral-800 {
--tw-text-opacity: 1;
color: rgb(38 38 38 / var(--tw-text-opacity, 1));
}
.text-orange-300 {
--tw-text-opacity: 1;
color: rgb(253 186 116 / var(--tw-text-opacity, 1));
}
.text-orange-800 {
--tw-text-opacity: 1;
color: rgb(154 52 18 / var(--tw-text-opacity, 1));
}
.text-pink-300 {
--tw-text-opacity: 1;
color: rgb(249 168 212 / var(--tw-text-opacity, 1));
}
.text-pink-800 {
--tw-text-opacity: 1;
color: rgb(157 23 77 / var(--tw-text-opacity, 1));
}
.text-purple-300 {
--tw-text-opacity: 1;
color: rgb(216 180 254 / var(--tw-text-opacity, 1));
}
.text-purple-800 {
--tw-text-opacity: 1;
color: rgb(107 33 168 / var(--tw-text-opacity, 1));
}
.text-red-300 { .text-red-300 {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(252 165 165 / var(--tw-text-opacity, 1)); color: rgb(252 165 165 / var(--tw-text-opacity, 1));
@@ -1296,11 +1630,96 @@ video {
color: rgb(239 68 68 / var(--tw-text-opacity, 1)); color: rgb(239 68 68 / var(--tw-text-opacity, 1));
} }
.text-red-800 {
--tw-text-opacity: 1;
color: rgb(153 27 27 / var(--tw-text-opacity, 1));
}
.text-rose-300 {
--tw-text-opacity: 1;
color: rgb(253 164 175 / var(--tw-text-opacity, 1));
}
.text-rose-800 {
--tw-text-opacity: 1;
color: rgb(159 18 57 / var(--tw-text-opacity, 1));
}
.text-sky-300 {
--tw-text-opacity: 1;
color: rgb(125 211 252 / var(--tw-text-opacity, 1));
}
.text-sky-800 {
--tw-text-opacity: 1;
color: rgb(7 89 133 / var(--tw-text-opacity, 1));
}
.text-slate-300 {
--tw-text-opacity: 1;
color: rgb(203 213 225 / var(--tw-text-opacity, 1));
}
.text-slate-800 {
--tw-text-opacity: 1;
color: rgb(30 41 59 / var(--tw-text-opacity, 1));
}
.text-stone-300 {
--tw-text-opacity: 1;
color: rgb(214 211 209 / var(--tw-text-opacity, 1));
}
.text-stone-800 {
--tw-text-opacity: 1;
color: rgb(41 37 36 / var(--tw-text-opacity, 1));
}
.text-teal-300 {
--tw-text-opacity: 1;
color: rgb(94 234 212 / var(--tw-text-opacity, 1));
}
.text-teal-800 {
--tw-text-opacity: 1;
color: rgb(17 94 89 / var(--tw-text-opacity, 1));
}
.text-violet-300 {
--tw-text-opacity: 1;
color: rgb(196 181 253 / var(--tw-text-opacity, 1));
}
.text-violet-800 {
--tw-text-opacity: 1;
color: rgb(91 33 182 / var(--tw-text-opacity, 1));
}
.text-white { .text-white {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity, 1)); color: rgb(255 255 255 / var(--tw-text-opacity, 1));
} }
.text-yellow-300 {
--tw-text-opacity: 1;
color: rgb(253 224 71 / var(--tw-text-opacity, 1));
}
.text-yellow-800 {
--tw-text-opacity: 1;
color: rgb(133 77 14 / var(--tw-text-opacity, 1));
}
.text-zinc-300 {
--tw-text-opacity: 1;
color: rgb(212 212 216 / var(--tw-text-opacity, 1));
}
.text-zinc-800 {
--tw-text-opacity: 1;
color: rgb(39 39 42 / var(--tw-text-opacity, 1));
}
.underline { .underline {
text-decoration-line: underline; text-decoration-line: underline;
} }
@@ -1337,6 +1756,10 @@ video {
outline-color: #d1d5db; outline-color: #d1d5db;
} }
.filter {
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.transition-all { .transition-all {
transition-property: all; transition-property: all;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);

View File

@@ -2,27 +2,58 @@
<div class="mx-auto max-w-2xl px-4 py-16 sm:px-6 sm:py-24 lg:max-w-7xl lg:px-8"> <div class="mx-auto max-w-2xl px-4 py-16 sm:px-6 sm:py-24 lg:max-w-7xl lg:px-8">
<h2 class="text-2xl font-bold tracking-tight text-gray-900">Available Zines</h2> <h2 class="text-2xl font-bold tracking-tight text-gray-900">Available Zines</h2>
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names..">
<div class="mt-6 grid grid-cols-1 gap-x-6 gap-y-10 sm:grid-cols-2 lg:grid-cols-4 xl:gap-x-8"> <div class="mt-6 grid grid-cols-1 gap-x-6 gap-y-10 sm:grid-cols-2 lg:grid-cols-4 xl:gap-x-8">
{{ range .data.shopItems }} {{ range .data.shopItems }}
<div class="group relative"> <div class="myClass group relative">
<a href="/shopitems/{{ .ID }}">
<img src="/{{ .Image }}" alt="Product Image" class="aspect-4/5 w-full rounded-md bg-gray-200 object-cover group-hover:opacity-75 lg:aspect-auto lg:h-80"> <img src="/{{ .Image }}" alt="Product Image" class="aspect-4/5 w-full rounded-md bg-gray-200 object-cover group-hover:opacity-75 lg:aspect-auto lg:h-80">
</a>
<div class="mt-4 flex justify-between"> <div class="mt-4 flex justify-between">
<div> <div>
<h3 class="text-sm text-gray-700"> <h3 class="text-sm text-gray-700">
<a href="/shopitems/{{ .ID }}"> <a href="/shopitems/{{ .ID }}">
<span aria-hidden="true" class="absolute inset-0"></span>
{{ .Name }} {{ .Name }}
</a> </a>
</h3> </h3>
<p class="mt-1 text-sm text-gray-500">{{ .Abstract }}</p> <p class="mt-1 text-sm text-gray-500">{{ .Abstract }}</p>
<p class="mt-1 text-sm text-gray-500">{{ range .Tags }}{{ .Name }} {{ end }}</p>
<p class="mt-1 text-sm text-gray-500">
{{ range .Tags }}
<a href="/tags/{{ .ID }}"><span class="bg-{{ .Color }}-100 text-{{ .Color }}-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded-sm dark:bg-{{ .Color }}-900 dark:text-{{ .Color }}-300">{{ .Name }}</span></a>
{{ end }}
</p>
</div> </div>
<p class="text-sm font-medium text-gray-900">{{ .BasePrice }}€</p> <p class="text-sm font-medium text-gray-900">{{ .BasePrice }}€</p>
</div> </div>
</div> </div>
{{ end }} {{ end }}
<script>
function myFunction() {
// Declare variables
var input, filter, ul, li, a, i, txtValue;
input = document.getElementById('myInput');
filter = input.value.toUpperCase();
//ul = document.getElementById("myUL");
//li = ul.getElementsByTagName('li');
li = document.getElementsByClassName("myClass");
console.log(li)
// Loop through all list items, and hide those who don't match the search query
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[1];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "";
} else {
li[i].style.display = "none";
}
}
}
</script>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -12,7 +12,36 @@
<form action="/tags/{{ .ID }}" method="POST"> <form action="/tags/{{ .ID }}" method="POST">
<div class="max-w-md mx-auto mt-4"> <div class="max-w-md mx-auto mt-4">
<div class="flex"> <div class="flex">
<span class="bg-{{ .Color }}-100 text-{{ .Color }}-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded-sm
dark:bg-{{ .Color }}-900 dark:text-{{ .Color }}-300">Preview</span>
<input type="text" id="name" name="name" value="{{ .Name }}" class="flex-grow border border-gray-300 rounded-l-md p-2 focus:outline-none focus:ring focus:ring-blue-500"> <input type="text" id="name" name="name" value="{{ .Name }}" class="flex-grow border border-gray-300 rounded-l-md p-2 focus:outline-none focus:ring focus:ring-blue-500">
<select name="color" required>
<option selected value="{{ .Color }}">{{ .Color }}</option>
<option value="1">Default</option>
<option value="red">red</option>
<option value="orange">orange</option>
<option value="amber">amber</option>
<option value="yellow">yellow</option>
<option value="lime">lime</option>
<option value="green">green</option>
<option value="emerald">emerald</option>
<option value="teal">teal</option>
<option value="cyan">cyan</option>
<option value="sky">sky</option>
<option value="blue">blue</option>
<option value="indigo">indigo</option>
<option value="violet">violet</option>
<option value="purple">purple</option>
<option value="fuchsia">fuchsia</option>
<option value="pink">pink</option>
<option value="rose">rose</option>
<option value="slate">slate</option>
<option value="gray">gray</option>
<option value="zinc">zinc</option>
<option value="neutral">neutral</option>
<option value="stone">stone</option>
</select>
<button type="submit" name="action" value="update" class="bg-blue-600 text-white ml-4 mr-4 rounded px-4 hover:bg-blue-700">Update</button> <button type="submit" name="action" value="update" class="bg-blue-600 text-white ml-4 mr-4 rounded px-4 hover:bg-blue-700">Update</button>
<button type="submit" name="action" value="delete" class="bg-red-800 text-white rounded px-4 hover:bg-red-900">Delete</button> <button type="submit" name="action" value="delete" class="bg-red-800 text-white rounded px-4 hover:bg-red-900">Delete</button>
</div> </div>