diff --git a/controllers/shopItemController.go b/controllers/shopItemController.go index 4d855cb..77796c8 100644 --- a/controllers/shopItemController.go +++ b/controllers/shopItemController.go @@ -535,6 +535,7 @@ func (rc *shopItemController) DeleteItemHandler(c *gin.Context) { func (rc *shopItemController) TagHandler(ctx *gin.Context) { name := ctx.PostForm("name") + color := ctx.PostForm("color") action := ctx.PostForm("action") tag, err := repositories.Tags.GetById(ctx.Param("id")) @@ -547,6 +548,7 @@ func (rc *shopItemController) TagHandler(ctx *gin.Context) { if action == "update" { tag.Name = name + tag.Color = color tag, err = repositories.Tags.Update(tag) if err != nil { diff --git a/models/tag.go b/models/tag.go index fefd44d..3c0cef3 100644 --- a/models/tag.go +++ b/models/tag.go @@ -2,22 +2,51 @@ package models import ( "fmt" - "gorm.io/gorm" "github.com/gin-gonic/gin" + "gorm.io/gorm" + "math/rand" ) type Tag struct { 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;"` } 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") - // Convert the price string to float64 + // Convert the price string to float64 tag := Tag{ - Name: name, + Name: name, + Color: colors[n], } if name == "" { @@ -27,14 +56,13 @@ func NewTag(ctx *gin.Context) (Tag, error) { return tag, nil } - func NewTagByJson(ctx *gin.Context) (Tag, error) { var tag Tag err := ctx.ShouldBindJSON(&tag) - + if err != nil { return Tag{}, err } - + return tag, nil } diff --git a/static/output.css b/static/output.css index 87db094..5677efe 100644 --- a/static/output.css +++ b/static/output.css @@ -574,10 +574,6 @@ video { position: relative; } -.inset-0 { - inset: 0px; -} - .inset-y-0 { top: 0px; bottom: 0px; @@ -634,6 +630,10 @@ video { margin-bottom: 2rem; } +.me-2 { + margin-inline-end: 0.5rem; +} + .ml-2 { margin-left: 0.5rem; } @@ -924,6 +924,10 @@ video { border-radius: 0.375rem; } +.rounded-sm { + border-radius: 0.125rem; +} + .rounded-l-md { border-top-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)); } +.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 { --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)); } +.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 { --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)); } +.bg-green-100 { + --tw-bg-opacity: 1; + background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); +} + .bg-green-600 { --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 { --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 { --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)); } +.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 { --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: #fef2f2; } @@ -1058,6 +1262,11 @@ video { padding-right: 0.5rem; } +.px-2\.5 { + padding-left: 0.625rem; + padding-right: 0.625rem; +} + .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; @@ -1078,6 +1287,11 @@ video { padding-right: 1.5rem; } +.py-0\.5 { + padding-top: 0.125rem; + padding-bottom: 0.125rem; +} + .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; @@ -1241,11 +1455,61 @@ video { 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 { --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 { --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)); } +.text-green-300 { + --tw-text-opacity: 1; + color: rgb(134 239 172 / var(--tw-text-opacity, 1)); +} + .text-green-500 { --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 { --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 { --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)); } +.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 { --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 { text-decoration-line: underline; } @@ -1337,6 +1756,10 @@ video { 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-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); diff --git a/views/shopitems.html b/views/shopitems.html index 32762ff..45b150d 100644 --- a/views/shopitems.html +++ b/views/shopitems.html @@ -2,27 +2,58 @@
{{ .Abstract }}
-{{ range .Tags }}{{ .Name }} {{ end }}
+ ++ {{ range .Tags }} + {{ .Name }} + {{ end }} +
{{ .BasePrice }}€