@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user