Fix: timers and styles
This commit is contained in:
		| @@ -3,7 +3,46 @@ | |||||||
|   <div class="flex justify-center"> |   <div class="flex justify-center"> | ||||||
|     <div class="grid grid-cols-2 sm:grid-cols-5 gap-2"> |     <div class="grid grid-cols-2 sm:grid-cols-5 gap-2"> | ||||||
|       {{range .Cards}} |       {{range .Cards}} | ||||||
| 	{{template "cardword" .}}  |       {{if .Revealed}} | ||||||
|  | 	  {{if eq .Color "amber"}} | ||||||
|  | 	    <div id="card-{{.Word}}" class="bg-{{.Color}}-100 border-8 border-stine-400 p-4 min-w-[100px] text-center text-white cursor-pointer"  | ||||||
|  | 		 style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} | ||||||
|  | 	    </div> | ||||||
|  | 	  {{else}} | ||||||
|  | 	    <div id="card-{{.Word}}" class="bg-{{.Color}}-400 border-8 border-stone-400 p-4 min-w-[100px] text-center text-white cursor-pointer"  | ||||||
|  | 		 style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} | ||||||
|  | 	    </div> | ||||||
|  | 	  {{end}} | ||||||
|  | 	{{else if or (.Mime) ($.IsOver)}} | ||||||
|  | 	  {{if eq .Color "amber"}} | ||||||
|  | 	    <div id="card-{{.Word}}" class="bg-{{.Color}}-100 border border-stone-400 p-4 rounded-lg min-w-[100px] text-center text-white cursor-pointer"  | ||||||
|  | 		 style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} | ||||||
|  | 	    </div> | ||||||
|  | 	  {{else}} | ||||||
|  | 	    <div id="card-{{.Word}}" class="bg-{{.Color}}-400 border border-stone-400 p-4 rounded-lg min-w-[100px] text-center text-white cursor-pointer"  | ||||||
|  | 		 style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} | ||||||
|  | 	    </div> | ||||||
|  | 	  {{end}} | ||||||
|  | 	{{else}} | ||||||
|  | 	<div id="card-{{.Word}}" class="bg-stone-400 border border-gray-500 rounded-lg min-w-[100px] cursor-pointer flex flex-col h-full"> | ||||||
|  | 	     <div class="flex-grow text-center p-4 flex items-center justify-center text-white" | ||||||
|  | 		  style="text-shadow: 0 2px 4px rgba(0,0,0,0.8);" | ||||||
|  | 		  hx-get="/word/show-color?word={{.Word}}" hx-trigger="click" hx-swap="outerHTML transition:true swap:.05s"> | ||||||
|  | 		{{.Word}} | ||||||
|  | 	     </div> | ||||||
|  | 	     <div class="h-6 bg-stone-600 rounded-b flex items-center justify-center text-white text-sm cursor-pointer" | ||||||
|  | 		  hx-get="/mark-card?word={{.Word}}" hx-trigger="click" hx-swap="outerHTML transition:true swap:.05s"> | ||||||
|  | 		 {{range .Marks}} | ||||||
|  | 		    {{ $length := len .Username }} | ||||||
|  | 		    {{ if lt $length 3 }} | ||||||
|  | 		    <span class="mx-0.5">{{.Username}}</span> | ||||||
|  | 		    {{else}} | ||||||
|  | 		    <span class="mx-0.5">{{slice .Username 0 3}}</span> | ||||||
|  | 		    {{end}} | ||||||
|  | 		 {{end}} | ||||||
|  | 	     </div> | ||||||
|  | 	</div> | ||||||
|  | 	{{end}} | ||||||
|       {{end}} |       {{end}} | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
|          style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} |          style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} | ||||||
|     </div> |     </div> | ||||||
|   {{end}} |   {{end}} | ||||||
| {{else if .Mime}} | {{else if or (.Mime) }} | ||||||
|   {{if eq .Color "amber"}} |   {{if eq .Color "amber"}} | ||||||
|     <div id="card-{{.Word}}" class="bg-{{.Color}}-100 border border-stone-400 p-4 rounded-lg min-w-[100px] text-center text-white cursor-pointer"  |     <div id="card-{{.Word}}" class="bg-{{.Color}}-100 border border-stone-400 p-4 rounded-lg min-w-[100px] text-center text-white cursor-pointer"  | ||||||
|          style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} |          style="text-shadow: 0 2px 4px rgba(0,0,0,0.9);"> {{.Word}} | ||||||
|   | |||||||
| @@ -4,9 +4,9 @@ | |||||||
|     Create a room <br/> |     Create a room <br/> | ||||||
|     or<br/> |     or<br/> | ||||||
|     <button button class="justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" hx-get="/room/hideform" hx-target=".create-room-div" >Hide Form</button> |     <button button class="justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" hx-get="/room/hideform" hx-target=".create-room-div" >Hide Form</button> | ||||||
|     <form hx-post="/room-create" hx-target="#main-content"> |     <form hx-post="/room-create" hx-target="#main-content" class="space-y-4"> | ||||||
| 	<label For="game_time">Turn Seconds:</label><br/> | 	<label For="game_time">Turn Seconds:</label><br/> | ||||||
| 	<input type="number" id="game_time" name="game_time" class="text-center text-white" value="300"/><br/> | 	<input type="number" id="game_time" name="game_time" class="text-center text-white" value="120"/><br/> | ||||||
| 	<label For="language">Language:</label><br/> | 	<label For="language">Language:</label><br/> | ||||||
| 	<div> | 	<div> | ||||||
| 	<select class="form-select text-white text-center bg-gray-900" id="languages" name="language"> | 	<select class="form-select text-white text-center bg-gray-900" id="languages" name="language"> | ||||||
|   | |||||||
| @@ -1,15 +1,15 @@ | |||||||
| {{define "login"}} | {{define "login"}} | ||||||
|     <div id="logindiv"> |     <div id="logindiv"> | ||||||
|         <form class="space-y-6" hx-post="/login" hx-target="#main-content"> |         <form class="space-y-4" hx-post="/login" hx-target="#main-content"> | ||||||
|           <div> |           <div> | ||||||
|             <label For="username" class="block text-sm font-medium leading-6 text-white-900">tell us your username (signup|login)</label> |             <label For="username" class="block text-sm text-center font-medium leading-6 text-white-900">tell us your username (signup|login)</label> | ||||||
|             <div class="mt-2"> |             <div class="mt-2"> | ||||||
|               <input id="username" name="username" hx-target="#login_notice" hx-swap="outerHTML" hx-post="/check/name" hx-trigger="input changed delay:400ms" autocomplete="username" required class="block w-full rounded-md border-0 bg-white py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6 text-center"/> |               <input id="username" name="username" hx-target="#login_notice" hx-swap="outerHTML" hx-post="/check/name" hx-trigger="input changed delay:400ms" autocomplete="username" required class="block w-full rounded-md border-0 bg-white py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6 text-center"/> | ||||||
|             </div> |             </div> | ||||||
| 	<div id="login_notice">this name looks available</div> | 	<div id="login_notice">this name looks available</div> | ||||||
|           </div> |           </div> | ||||||
|             <div> |             <div> | ||||||
|             <label For="password" class="block text-sm font-medium leading-6 text-white-900">password</label> |             <label For="password" class="block text-sm font-medium text-center leading-6 text-white-900">password</label> | ||||||
|               <input id="password" name="password" type="password" class="block w-full rounded-md border-0 bg-white py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6 text-center"/> |               <input id="password" name="password" type="password" class="block w-full rounded-md border-0 bg-white py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6 text-center"/> | ||||||
|             </div> |             </div> | ||||||
|           <div> |           <div> | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ func StartTurnTimer(roomID string, timeLeft uint32) { | |||||||
| 	logger := slog.Default().With("room_id", roomID) | 	logger := slog.Default().With("room_id", roomID) | ||||||
|  |  | ||||||
| 	onTurnEnd := func(ctx context.Context, roomID string) { | 	onTurnEnd := func(ctx context.Context, roomID string) { | ||||||
| 		room, err := repo.RoomGetByID(context.Background(), roomID) | 		room, err := repo.RoomGetExtended(context.Background(), roomID) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			logger.Error("failed to get room by id", "error", err) | 			logger.Error("failed to get room by id", "error", err) | ||||||
| 			return | 			return | ||||||
| @@ -36,4 +36,5 @@ func StartTurnTimer(roomID string, timeLeft uint32) { | |||||||
|  |  | ||||||
| func StopTurnTimer(roomID string) { | func StopTurnTimer(roomID string) { | ||||||
| 	timer.StopTurnTimer(roomID) | 	timer.StopTurnTimer(roomID) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ func (b *Bot) StartTurnTimer(timeLeft uint32) { | |||||||
| 	logger := b.log.With("room_id", b.RoomID) | 	logger := b.log.With("room_id", b.RoomID) | ||||||
|  |  | ||||||
| 	onTurnEnd := func(ctx context.Context, roomID string) { | 	onTurnEnd := func(ctx context.Context, roomID string) { | ||||||
| 		room, err := repos.RP.RoomGetByID(context.Background(), roomID) | 		room, err := repos.RP.RoomGetExtended(context.Background(), roomID) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			logger.Error("failed to get room by id", "error", err) | 			logger.Error("failed to get room by id", "error", err) | ||||||
| 			return | 			return | ||||||
| @@ -46,4 +46,5 @@ func (b *Bot) StartTurnTimer(timeLeft uint32) { | |||||||
|  |  | ||||||
| func (b *Bot) StopTurnTimer() { | func (b *Bot) StopTurnTimer() { | ||||||
| 	timer.StopTurnTimer(b.RoomID) | 	timer.StopTurnTimer(b.RoomID) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -410,14 +410,22 @@ func (r *Room) RevealSpecificWord(word string) uint32 { | |||||||
| 	return 0 | 	return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (r *Room) SetGameOverToCards(isover bool) { | ||||||
|  | 	for i := range r.Cards { | ||||||
|  | 		r.Cards[i].IsOver = isover | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| type WordCard struct { | type WordCard struct { | ||||||
| 	ID       uint32     `json:"id" db:"id"` | 	ID       uint32    `json:"id" db:"id"` | ||||||
| 	RoomID   string     `json:"room_id" db:"room_id"` | 	RoomID   string    `json:"room_id" db:"room_id"` | ||||||
| 	Word     string     `json:"word" db:"word"` | 	Word     string    `json:"word" db:"word"` | ||||||
| 	Color    WordColor  `json:"color" db:"color"` | 	Color    WordColor `json:"color" db:"color"` | ||||||
| 	Revealed bool       `json:"revealed" db:"revealed"` | 	Revealed bool      `json:"revealed" db:"revealed"` | ||||||
| 	Mime     bool       `json:"mime" db:"mime_view"` // user who sees that card is mime | 	// pain; but at the end of the game players should see color of unopen cards | ||||||
| 	Marks    []CardMark `json:"marks" db:"-"` | 	IsOver bool | ||||||
|  | 	Mime   bool       `json:"mime" db:"mime_view"` // user who sees that card is mime | ||||||
|  | 	Marks  []CardMark `json:"marks" db:"-"` | ||||||
| } | } | ||||||
|  |  | ||||||
| // table: settings | // table: settings | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								todos.md
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								todos.md
									
									
									
									
									
								
							| @@ -93,3 +93,4 @@ | |||||||
| - journal still does not work; + | - journal still does not work; + | ||||||
| - lose/win game; then exit room (while being the creator), then press to stats -> cannot find session in db, although cookie in place and session in db; + | - lose/win game; then exit room (while being the creator), then press to stats -> cannot find session in db, although cookie in place and session in db; + | ||||||
| - exit endpoints delets player from db; + | - exit endpoints delets player from db; + | ||||||
|  | - timer end did not update the page; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder