chore: use proper casing

This commit is contained in:
2026-04-08 16:00:49 +02:00
parent c9d34fd567
commit bffdcb5241
20 changed files with 131 additions and 131 deletions

View File

@@ -13,7 +13,7 @@ templ AnimeDetails(anime jikan.Anime, currentStatus string) {
if anime.ImageURL() != "" { if anime.ImageURL() != "" {
<img src={ anime.ImageURL() } alt={ anime.DisplayTitle() }/> <img src={ anime.ImageURL() } alt={ anime.DisplayTitle() }/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
</div> </div>
<div class="anime-info"> <div class="anime-info">
@@ -41,32 +41,32 @@ templ AnimeDetails(anime jikan.Anime, currentStatus string) {
</div> </div>
</div> </div>
<section class="anime-synopsis"> <section class="anime-synopsis">
<h3>synopsis</h3> <h3>Synopsis</h3>
if anime.Synopsis != "" { if anime.Synopsis != "" {
<p>{ anime.Synopsis }</p> <p>{ anime.Synopsis }</p>
} else { } else {
<p class="no-synopsis">no synopsis available.</p> <p class="no-synopsis">No synopsis available.</p>
} }
</section> </section>
<section class="anime-relations"> <section class="anime-relations">
<h3>related</h3> <h3>Related</h3>
<div hx-get={ string(templ.URL(fmt.Sprintf("/api/anime/%d/relations", anime.MalID))) } hx-trigger="load"> <div hx-get={ string(templ.URL(fmt.Sprintf("/api/anime/%d/relations", anime.MalID))) } hx-trigger="load">
<div class="loading-indicator"> <div class="loading-indicator">
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<span>loading relations</span> <span>Loading relations</span>
</div> </div>
</div> </div>
</section> </section>
<section class="anime-recommendations"> <section class="anime-recommendations">
<h3>recommendations</h3> <h3>Recommendations</h3>
<div hx-get={ string(templ.URL(fmt.Sprintf("/api/anime/%d/recommendations", anime.MalID))) } hx-trigger="load"> <div hx-get={ string(templ.URL(fmt.Sprintf("/api/anime/%d/recommendations", anime.MalID))) } hx-trigger="load">
<div class="loading-indicator"> <div class="loading-indicator">
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<span>loading recommendations</span> <span>Loading recommendations</span>
</div> </div>
</div> </div>
</section> </section>
@@ -225,7 +225,7 @@ templ WatchlistDropdown(animeID int, animeTitle string, animeTitleEnglish string
hx-delete={ string(templ.URL(fmt.Sprintf("/api/watchlist/%d", animeID))) } hx-delete={ string(templ.URL(fmt.Sprintf("/api/watchlist/%d", animeID))) }
hx-target="#watchlist-dropdown" hx-target="#watchlist-dropdown"
hx-swap="outerHTML" hx-swap="outerHTML"
>remove from list</button> >Remove from list</button>
} }
</div> </div>
</div> </div>
@@ -264,15 +264,15 @@ templ statusOption(anime jikan.Anime, status string, currentStatus string) {
func formatStatus(status string) string { func formatStatus(status string) string {
switch status { switch status {
case "watching": case "watching":
return "watching" return "Watching"
case "completed": case "completed":
return "completed" return "Completed"
case "on_hold": case "on_hold":
return "on hold" return "On hold"
case "dropped": case "dropped":
return "dropped" return "Dropped"
case "plan_to_watch": case "plan_to_watch":
return "plan to watch" return "Plan to watch"
default: default:
return status return status
} }
@@ -287,7 +287,7 @@ templ AnimeRelationsList(relations []jikan.RelationEntry) {
if rel.Anime.ImageURL() != "" { if rel.Anime.ImageURL() != "" {
<img src={ rel.Anime.ImageURL() } alt={ rel.Anime.DisplayTitle() } class="relation-thumb"/> <img src={ rel.Anime.ImageURL() } alt={ rel.Anime.DisplayTitle() } class="relation-thumb"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
<div class="relation-title">{ rel.Anime.DisplayTitle() }</div> <div class="relation-title">{ rel.Anime.DisplayTitle() }</div>
</div> </div>
@@ -296,7 +296,7 @@ templ AnimeRelationsList(relations []jikan.RelationEntry) {
if rel.Anime.ImageURL() != "" { if rel.Anime.ImageURL() != "" {
<img src={ rel.Anime.ImageURL() } alt={ rel.Anime.DisplayTitle() } class="relation-thumb"/> <img src={ rel.Anime.ImageURL() } alt={ rel.Anime.DisplayTitle() } class="relation-thumb"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
<div class="relation-title">{ rel.Anime.DisplayTitle() }</div> <div class="relation-title">{ rel.Anime.DisplayTitle() }</div>
</a> </a>
@@ -316,7 +316,7 @@ templ AnimeRecommendations(recs []jikan.Anime) {
if anime.ImageURL() != "" { if anime.ImageURL() != "" {
<img src={ anime.ImageURL() } alt={ anime.DisplayTitle() } class="relation-thumb"/> <img src={ anime.ImageURL() } alt={ anime.DisplayTitle() } class="relation-thumb"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
<div class="relation-title">{ anime.DisplayTitle() }</div> <div class="relation-title">{ anime.DisplayTitle() }</div>
</a> </a>

View File

@@ -81,7 +81,7 @@ func AnimeDetails(anime jikan.Anime, currentStatus string) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -210,7 +210,7 @@ func AnimeDetails(anime jikan.Anime, currentStatus string) templ.Component {
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</div></div></div><section class=\"anime-synopsis\"><h3>synopsis</h3>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</div></div></div><section class=\"anime-synopsis\"><h3>Synopsis</h3>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -233,12 +233,12 @@ func AnimeDetails(anime jikan.Anime, currentStatus string) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<p class=\"no-synopsis\">no synopsis available.</p>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<p class=\"no-synopsis\">No synopsis available.</p>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</section><section class=\"anime-relations\"><h3>related</h3><div hx-get=\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</section><section class=\"anime-relations\"><h3>Related</h3><div hx-get=\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -251,7 +251,7 @@ func AnimeDetails(anime jikan.Anime, currentStatus string) templ.Component {
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\" hx-trigger=\"load\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>loading relations</span></div></div></section><section class=\"anime-recommendations\"><h3>recommendations</h3><div hx-get=\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\" hx-trigger=\"load\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>Loading relations</span></div></div></section><section class=\"anime-recommendations\"><h3>Recommendations</h3><div hx-get=\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -264,7 +264,7 @@ func AnimeDetails(anime jikan.Anime, currentStatus string) templ.Component {
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "\" hx-trigger=\"load\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>loading recommendations</span></div></div></section></div><aside class=\"anime-sidebar\">") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "\" hx-trigger=\"load\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>Loading recommendations</span></div></div></section></div><aside class=\"anime-sidebar\">")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -711,7 +711,7 @@ func WatchlistDropdown(animeID int, animeTitle string, animeTitleEnglish string,
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "\" hx-target=\"#watchlist-dropdown\" hx-swap=\"outerHTML\">remove from list</button>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "\" hx-target=\"#watchlist-dropdown\" hx-swap=\"outerHTML\">Remove from list</button>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -893,15 +893,15 @@ func statusOption(anime jikan.Anime, status string, currentStatus string) templ.
func formatStatus(status string) string { func formatStatus(status string) string {
switch status { switch status {
case "watching": case "watching":
return "watching" return "Watching"
case "completed": case "completed":
return "completed" return "Completed"
case "on_hold": case "on_hold":
return "on hold" return "On hold"
case "dropped": case "dropped":
return "dropped" return "Dropped"
case "plan_to_watch": case "plan_to_watch":
return "plan to watch" return "Plan to watch"
default: default:
return status return status
} }
@@ -971,7 +971,7 @@ func AnimeRelationsList(relations []jikan.RelationEntry) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -1043,7 +1043,7 @@ func AnimeRelationsList(relations []jikan.RelationEntry) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -1072,7 +1072,7 @@ func AnimeRelationsList(relations []jikan.RelationEntry) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<p style=\"color: var(--text-muted); font-size: var(--text-sm);\">no related anime found.</p>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<p style=\"color: var(--text-muted); font-size: var(--text-sm);\">No related anime found.</p>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -1157,7 +1157,7 @@ func AnimeRecommendations(recs []jikan.Anime) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -1185,7 +1185,7 @@ func AnimeRecommendations(recs []jikan.Anime) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<p style=\"color: var(--text-muted); font-size: var(--text-sm);\">no recommendations available.</p>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<p style=\"color: var(--text-muted); font-size: var(--text-sm);\">No recommendations available.</p>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -3,21 +3,21 @@ package templates
templ Login() { templ Login() {
@Layout("Login") { @Layout("Login") {
<div class="login-container"> <div class="login-container">
<h2>sign in</h2> <h2>Sign in</h2>
<p class="login-subtitle">enter your credentials to continue</p> <p class="login-subtitle">Enter your credentials to continue.</p>
<form action="/login" method="POST" class="login-form"> <form action="/login" method="POST" class="login-form">
<div class="form-group"> <div class="form-group">
<label for="username">username / email</label> <label for="username">Username / Email</label>
<input type="text" id="username" name="username" required placeholder="you@example.com"/> <input type="text" id="username" name="username" required placeholder="you@example.com"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="password">password</label> <label for="password">Password</label>
<input type="password" id="password" name="password" required placeholder="your password"/> <input type="password" id="password" name="password" required placeholder="Your password"/>
</div> </div>
<button type="submit" class="login-button">sign in</button> <button type="submit" class="login-button">Sign in</button>
</form> </form>
<p style="margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);"> <p style="margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);">
don't have an account? <a href="/register" style="color: var(--primary);">register</a> Don't have an account? <a href="/register" style="color: var(--primary);">Register</a>
</p> </p>
</div> </div>
} }
@@ -26,24 +26,24 @@ templ Login() {
templ Register() { templ Register() {
@Layout("Register") { @Layout("Register") {
<div class="login-container"> <div class="login-container">
<h2>register</h2> <h2>Register</h2>
<p class="login-subtitle">create a new account to track anime</p> <p class="login-subtitle">Create a new account to track anime.</p>
<form action="/register" method="POST" class="login-form"> <form action="/register" method="POST" class="login-form">
<div class="form-group"> <div class="form-group">
<label for="username">username / email</label> <label for="username">Username / Email</label>
<input type="text" id="username" name="username" required placeholder="you@example.com"/> <input type="text" id="username" name="username" required placeholder="you@example.com"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="password">password</label> <label for="password">Password</label>
<input type="password" id="password" name="password" required placeholder="minimum 12 chars"/> <input type="password" id="password" name="password" required placeholder="Minimum 12 chars"/>
</div> </div>
<p style="font-size: 0.75rem; color: var(--text-muted); margin-bottom: 1rem; line-height: 1.4;"> <p style="font-size: 0.75rem; color: var(--text-muted); margin-bottom: 1rem; line-height: 1.4;">
Password must be at least 12 characters and include an uppercase letter, lowercase letter, number, and special character. Password must be at least 12 characters and include an uppercase letter, lowercase letter, number, and special character.
</p> </p>
<button type="submit" class="login-button">create account</button> <button type="submit" class="login-button">Create account</button>
</form> </form>
<p style="margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);"> <p style="margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);">
already have an account? <a href="/login" style="color: var(--primary);">sign in</a> Already have an account? <a href="/login" style="color: var(--primary);">Sign in</a>
</p> </p>
</div> </div>
} }

View File

@@ -41,7 +41,7 @@ func Login() templ.Component {
}() }()
} }
ctx = templ.InitializeContext(ctx) ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"login-container\"><h2>sign in</h2><p class=\"login-subtitle\">enter your credentials to continue</p><form action=\"/login\" method=\"POST\" class=\"login-form\"><div class=\"form-group\"><label for=\"username\">username / email</label> <input type=\"text\" id=\"username\" name=\"username\" required placeholder=\"you@example.com\"></div><div class=\"form-group\"><label for=\"password\">password</label> <input type=\"password\" id=\"password\" name=\"password\" required placeholder=\"your password\"></div><button type=\"submit\" class=\"login-button\">sign in</button></form><p style=\"margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);\">don't have an account? <a href=\"/register\" style=\"color: var(--primary);\">register</a></p></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"login-container\"><h2>Sign in</h2><p class=\"login-subtitle\">Enter your credentials to continue.</p><form action=\"/login\" method=\"POST\" class=\"login-form\"><div class=\"form-group\"><label for=\"username\">Username / Email</label> <input type=\"text\" id=\"username\" name=\"username\" required placeholder=\"you@example.com\"></div><div class=\"form-group\"><label for=\"password\">Password</label> <input type=\"password\" id=\"password\" name=\"password\" required placeholder=\"Your password\"></div><button type=\"submit\" class=\"login-button\">Sign in</button></form><p style=\"margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);\">Don't have an account? <a href=\"/register\" style=\"color: var(--primary);\">Register</a></p></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -88,7 +88,7 @@ func Register() templ.Component {
}() }()
} }
ctx = templ.InitializeContext(ctx) ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<div class=\"login-container\"><h2>register</h2><p class=\"login-subtitle\">create a new account to track anime</p><form action=\"/register\" method=\"POST\" class=\"login-form\"><div class=\"form-group\"><label for=\"username\">username / email</label> <input type=\"text\" id=\"username\" name=\"username\" required placeholder=\"you@example.com\"></div><div class=\"form-group\"><label for=\"password\">password</label> <input type=\"password\" id=\"password\" name=\"password\" required placeholder=\"minimum 12 chars\"></div><p style=\"font-size: 0.75rem; color: var(--text-muted); margin-bottom: 1rem; line-height: 1.4;\">Password must be at least 12 characters and include an uppercase letter, lowercase letter, number, and special character.</p><button type=\"submit\" class=\"login-button\">create account</button></form><p style=\"margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);\">already have an account? <a href=\"/login\" style=\"color: var(--primary);\">sign in</a></p></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<div class=\"login-container\"><h2>Register</h2><p class=\"login-subtitle\">Create a new account to track anime.</p><form action=\"/register\" method=\"POST\" class=\"login-form\"><div class=\"form-group\"><label for=\"username\">Username / Email</label> <input type=\"text\" id=\"username\" name=\"username\" required placeholder=\"you@example.com\"></div><div class=\"form-group\"><label for=\"password\">Password</label> <input type=\"password\" id=\"password\" name=\"password\" required placeholder=\"Minimum 12 chars\"></div><p style=\"font-size: 0.75rem; color: var(--text-muted); margin-bottom: 1rem; line-height: 1.4;\">Password must be at least 12 characters and include an uppercase letter, lowercase letter, number, and special character.</p><button type=\"submit\" class=\"login-button\">Create account</button></form><p style=\"margin-top: 1rem; text-align: center; color: var(--text-muted); font-size: var(--text-sm);\">Already have an account? <a href=\"/login\" style=\"color: var(--primary);\">Sign in</a></p></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -11,7 +11,7 @@ templ Catalog() {
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<span>loading catalog</span> <span>Loading catalog</span>
</div> </div>
</div> </div>
</div> </div>
@@ -50,7 +50,7 @@ templ CatalogItem(anime jikan.Anime) {
if anime.ImageURL() != "" { if anime.ImageURL() != "" {
<img src={ anime.ImageURL() } alt={ anime.DisplayTitle() } class="catalog-thumb" loading="lazy"/> <img src={ anime.ImageURL() } alt={ anime.DisplayTitle() } class="catalog-thumb" loading="lazy"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
</a> </a>
<div class="catalog-title"> <div class="catalog-title">

View File

@@ -44,7 +44,7 @@ func Catalog() templ.Component {
}() }()
} }
ctx = templ.InitializeContext(ctx) ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"catalog-grid\" id=\"catalog-content\"><div hx-get=\"/api/catalog?page=1\" hx-trigger=\"load\" hx-swap=\"outerHTML\" style=\"grid-column: 1 / -1;\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>loading catalog</span></div></div></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"catalog-grid\" id=\"catalog-content\"><div hx-get=\"/api/catalog?page=1\" hx-trigger=\"load\" hx-swap=\"outerHTML\" style=\"grid-column: 1 / -1;\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>Loading catalog</span></div></div></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -203,7 +203,7 @@ func CatalogItem(anime jikan.Anime) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -31,7 +31,7 @@ templ Discover() {
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<span>loading discover</span> <span>Loading discover</span>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -44,7 +44,7 @@ func Discover() templ.Component {
}() }()
} }
ctx = templ.InitializeContext(ctx) ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"discover-container\"><div class=\"tabs\"><button class=\"tab active\" hx-get=\"/api/discover/airing?page=1\" hx-target=\"#discover-content\" hx-trigger=\"click\" onclick=\"document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); this.classList.add('active');\">airing now</button> <button class=\"tab\" hx-get=\"/api/discover/upcoming?page=1\" hx-target=\"#discover-content\" hx-trigger=\"click\" onclick=\"document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); this.classList.add('active');\">upcoming</button></div><div class=\"catalog-grid\" id=\"discover-content\" hx-get=\"/api/discover/airing?page=1\" hx-trigger=\"load\"><div class=\"loading-indicator\" style=\"grid-column: 1 / -1;\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>loading discover</span></div></div></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"discover-container\"><div class=\"tabs\"><button class=\"tab active\" hx-get=\"/api/discover/airing?page=1\" hx-target=\"#discover-content\" hx-trigger=\"click\" onclick=\"document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); this.classList.add('active');\">airing now</button> <button class=\"tab\" hx-get=\"/api/discover/upcoming?page=1\" hx-target=\"#discover-content\" hx-trigger=\"click\" onclick=\"document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); this.classList.add('active');\">upcoming</button></div><div class=\"catalog-grid\" id=\"discover-content\" hx-get=\"/api/discover/airing?page=1\" hx-trigger=\"load\"><div class=\"loading-indicator\" style=\"grid-column: 1 / -1;\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>Loading discover</span></div></div></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -28,8 +28,8 @@ templ Search(q string) {
templ SearchResultsWrapper(query string, animes []jikan.Anime, nextPage int, hasNext bool) { templ SearchResultsWrapper(query string, animes []jikan.Anime, nextPage int, hasNext bool) {
if len(animes) == 0 { if len(animes) == 0 {
<div class="empty-state"> <div class="empty-state">
<div class="empty-state-title">no results found</div> <div class="empty-state-title">No results found.</div>
<div class="empty-state-text">try a different search term</div> <div class="empty-state-text">Try a different search term.</div>
</div> </div>
} else { } else {
<div class="catalog-grid"> <div class="catalog-grid">

View File

@@ -103,7 +103,7 @@ func SearchResultsWrapper(query string, animes []jikan.Anime, nextPage int, hasN
} }
ctx = templ.ClearChildren(ctx) ctx = templ.ClearChildren(ctx)
if len(animes) == 0 { if len(animes) == 0 {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "<div class=\"empty-state\"><div class=\"empty-state-title\">no results found</div><div class=\"empty-state-text\">try a different search term</div></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "<div class=\"empty-state\"><div class=\"empty-state-title\">No results found.</div><div class=\"empty-state-text\">Try a different search term.</div></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -16,16 +16,16 @@ templ Layout(title string) {
<div class="header-left"> <div class="header-left">
<a href="/" class="logo">/mal</a> <a href="/" class="logo">/mal</a>
<div class="nav"> <div class="nav">
<a href="/">catalog</a> <a href="/">Catalog</a>
<a href="/discover">discover</a> <a href="/discover">Discover</a>
<a href="/schedule">schedule</a> <a href="/schedule">Schedule</a>
<a href="/notifications">notifications</a> <a href="/notifications">Notifications</a>
<a href="/watchlist">watchlist</a> <a href="/watchlist">Watchlist</a>
</div> </div>
</div> </div>
<div class="header-search-wrapper"> <div class="header-search-wrapper">
<form action="/search" method="GET" class="header-search"> <form action="/search" method="GET" class="header-search">
<input type="text" id="search-input" name="q" class="search-input" placeholder="search anime..." autocomplete="off"/> <input type="text" id="search-input" name="q" class="search-input" placeholder="Search anime..." autocomplete="off"/>
<div id="search-dropdown" class="search-dropdown"></div> <div id="search-dropdown" class="search-dropdown"></div>
</form> </form>
</div> </div>

View File

@@ -42,7 +42,7 @@ func Layout(title string) templ.Component {
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</title><link rel=\"stylesheet\" href=\"/static/css/style.css\"><script src=\"https://unpkg.com/htmx.org@1.9.11\"></script></head><body><header><div class=\"header-top\"><div class=\"header-left\"><a href=\"/\" class=\"logo\">/mal</a><div class=\"nav\"><a href=\"/\">catalog</a> <a href=\"/discover\">discover</a> <a href=\"/schedule\">schedule</a> <a href=\"/notifications\">notifications</a> <a href=\"/watchlist\">watchlist</a></div></div><div class=\"header-search-wrapper\"><form action=\"/search\" method=\"GET\" class=\"header-search\"><input type=\"text\" id=\"search-input\" name=\"q\" class=\"search-input\" placeholder=\"search anime...\" autocomplete=\"off\"><div id=\"search-dropdown\" class=\"search-dropdown\"></div></form></div></div></header><main>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</title><link rel=\"stylesheet\" href=\"/static/css/style.css\"><script src=\"https://unpkg.com/htmx.org@1.9.11\"></script></head><body><header><div class=\"header-top\"><div class=\"header-left\"><a href=\"/\" class=\"logo\">/mal</a><div class=\"nav\"><a href=\"/\">Catalog</a> <a href=\"/discover\">Discover</a> <a href=\"/schedule\">Schedule</a> <a href=\"/notifications\">Notifications</a> <a href=\"/watchlist\">Watchlist</a></div></div><div class=\"header-search-wrapper\"><form action=\"/search\" method=\"GET\" class=\"header-search\"><input type=\"text\" id=\"search-input\" name=\"q\" class=\"search-input\" placeholder=\"Search anime...\" autocomplete=\"off\"><div id=\"search-dropdown\" class=\"search-dropdown\"></div></form></div></div></header><main>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -12,13 +12,13 @@ type WatchingAnimeWithDetails struct {
templ Notifications(watching []WatchingAnimeWithDetails) { templ Notifications(watching []WatchingAnimeWithDetails) {
@Layout("mal - notifications") { @Layout("mal - notifications") {
<div class="notifications-page"> <div class="notifications-page">
<h1>airing shows (tracking)</h1> <h1>Airing shows (tracking)</h1>
<p class="notifications-subtitle">shows you're currently watching or planning to watch</p> <p class="notifications-subtitle">Shows you're currently watching or planning to watch.</p>
if len(watching) == 0 { if len(watching) == 0 {
<div class="no-notifications"> <div class="no-notifications">
<p>no airing anime in your watching list</p> <p>No airing anime in your watching list.</p>
<p class="hint">add currently airing shows to your watching list to see upcoming episodes here</p> <p class="hint">Add currently airing shows to your watching list to see upcoming episodes here.</p>
</div> </div>
} else { } else {
<div class="notifications-list"> <div class="notifications-list">
@@ -28,13 +28,13 @@ templ Notifications(watching []WatchingAnimeWithDetails) {
</div> </div>
} }
<h1 style="margin-top: var(--space-2xl);">discovered sequels</h1> <h1 style="margin-top: var(--space-2xl);">Discovered sequels</h1>
<p class="notifications-subtitle">because you've watched prequels</p> <p class="notifications-subtitle">Because you've watched prequels.</p>
<div hx-get="/notifications/upcoming" hx-trigger="load, every 15s" hx-swap="innerHTML"> <div hx-get="/notifications/upcoming" hx-trigger="load, every 15s" hx-swap="innerHTML">
<div class="loading-indicator"> <div class="loading-indicator">
<div class="loading-dot"></div><div class="loading-dot"></div><div class="loading-dot"></div> <div class="loading-dot"></div><div class="loading-dot"></div><div class="loading-dot"></div>
<span>syncing sequel graphs...</span> <span>Syncing sequel graphs...</span>
</div> </div>
</div> </div>
</div> </div>
@@ -55,8 +55,8 @@ func splitUpcomingSeasons(items []database.GetUpcomingSeasonsRow) (airing []data
templ UpcomingSeasonsList(upcomingSeasons []database.GetUpcomingSeasonsRow) { templ UpcomingSeasonsList(upcomingSeasons []database.GetUpcomingSeasonsRow) {
if len(upcomingSeasons) == 0 { if len(upcomingSeasons) == 0 {
<div class="no-notifications"> <div class="no-notifications">
<p>no upcoming seasons for anime you've watched</p> <p>No upcoming seasons for anime you've watched.</p>
<p class="hint">as you watch more shows, new seasons will appear here</p> <p class="hint">As you watch more shows, new seasons will appear here.</p>
</div> </div>
} else { } else {
@renderSplitSeasons(upcomingSeasons) @renderSplitSeasons(upcomingSeasons)
@@ -66,7 +66,7 @@ templ UpcomingSeasonsList(upcomingSeasons []database.GetUpcomingSeasonsRow) {
templ renderSplitSeasons(upcomingSeasons []database.GetUpcomingSeasonsRow) { templ renderSplitSeasons(upcomingSeasons []database.GetUpcomingSeasonsRow) {
if airing, upcoming := splitUpcomingSeasons(upcomingSeasons); true { if airing, upcoming := splitUpcomingSeasons(upcomingSeasons); true {
if len(airing) > 0 { if len(airing) > 0 {
<h2 style="font-size: var(--text-md); margin-bottom: var(--space-md); color: var(--text-muted);">airing now (not tracked)</h2> <h2 style="font-size: var(--text-md); margin-bottom: var(--space-md); color: var(--text-muted);">Airing now (not tracked)</h2>
<div class="notifications-list" style="margin-bottom: var(--space-xl);"> <div class="notifications-list" style="margin-bottom: var(--space-xl);">
for _, item := range airing { for _, item := range airing {
@UpcomingSeasonCard(item) @UpcomingSeasonCard(item)
@@ -75,7 +75,7 @@ templ renderSplitSeasons(upcomingSeasons []database.GetUpcomingSeasonsRow) {
} }
if len(upcoming) > 0 { if len(upcoming) > 0 {
<h2 style="font-size: var(--text-md); margin-bottom: var(--space-md); color: var(--text-muted);">announced & upcoming</h2> <h2 style="font-size: var(--text-md); margin-bottom: var(--space-md); color: var(--text-muted);">Announced & upcoming</h2>
<div class="notifications-list"> <div class="notifications-list">
for _, item := range upcoming { for _, item := range upcoming {
@UpcomingSeasonCard(item) @UpcomingSeasonCard(item)
@@ -91,7 +91,7 @@ templ UpcomingSeasonCard(item database.GetUpcomingSeasonsRow) {
if item.ImageUrl != "" { if item.ImageUrl != "" {
<img src={ item.ImageUrl } alt={ displaySeasonTitle(item) } loading="lazy"/> <img src={ item.ImageUrl } alt={ displaySeasonTitle(item) } loading="lazy"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
</div> </div>
<div class="notification-content"> <div class="notification-content">
@@ -99,7 +99,7 @@ templ UpcomingSeasonCard(item database.GetUpcomingSeasonsRow) {
{ displaySeasonTitle(item) } { displaySeasonTitle(item) }
</div> </div>
<div class="notification-meta"> <div class="notification-meta">
<span class="notification-broadcast" style="color: var(--text-muted) !important;">because you watched { item.PrequelTitle }</span> <span class="notification-broadcast" style="color: var(--text-muted) !important;">Because you watched { item.PrequelTitle }</span>
</div> </div>
</div> </div>
</a> </a>
@@ -121,7 +121,7 @@ templ NotificationCard(item WatchingAnimeWithDetails) {
if item.Entry.ImageUrl != "" { if item.Entry.ImageUrl != "" {
<img src={ item.Entry.ImageUrl } alt={ displayTitle(item.Entry) } loading="lazy"/> <img src={ item.Entry.ImageUrl } alt={ displayTitle(item.Entry) } loading="lazy"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
</div> </div>
<div class="notification-content"> <div class="notification-content">

View File

@@ -50,12 +50,12 @@ func Notifications(watching []WatchingAnimeWithDetails) templ.Component {
}() }()
} }
ctx = templ.InitializeContext(ctx) ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"notifications-page\"><h1>airing shows (tracking)</h1><p class=\"notifications-subtitle\">shows you're currently watching or planning to watch</p>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"notifications-page\"><h1>Airing shows (tracking)</h1><p class=\"notifications-subtitle\">Shows you're currently watching or planning to watch.</p>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
if len(watching) == 0 { if len(watching) == 0 {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<div class=\"no-notifications\"><p>no airing anime in your watching list</p><p class=\"hint\">add currently airing shows to your watching list to see upcoming episodes here</p></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<div class=\"no-notifications\"><p>No airing anime in your watching list.</p><p class=\"hint\">Add currently airing shows to your watching list to see upcoming episodes here.</p></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -75,7 +75,7 @@ func Notifications(watching []WatchingAnimeWithDetails) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<h1 style=\"margin-top: var(--space-2xl);\">discovered sequels</h1><p class=\"notifications-subtitle\">because you've watched prequels</p><div hx-get=\"/notifications/upcoming\" hx-trigger=\"load, every 15s\" hx-swap=\"innerHTML\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>syncing sequel graphs...</span></div></div></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<h1 style=\"margin-top: var(--space-2xl);\">discovered sequels</h1><p class=\"notifications-subtitle\">Because you've watched prequels.</p><div hx-get=\"/notifications/upcoming\" hx-trigger=\"load, every 15s\" hx-swap=\"innerHTML\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>Syncing sequel graphs...</span></div></div></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -122,7 +122,7 @@ func UpcomingSeasonsList(upcomingSeasons []database.GetUpcomingSeasonsRow) templ
} }
ctx = templ.ClearChildren(ctx) ctx = templ.ClearChildren(ctx)
if len(upcomingSeasons) == 0 { if len(upcomingSeasons) == 0 {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<div class=\"no-notifications\"><p>no upcoming seasons for anime you've watched</p><p class=\"hint\">as you watch more shows, new seasons will appear here</p></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<div class=\"no-notifications\"><p>No upcoming seasons for anime you've watched.</p><p class=\"hint\">As you watch more shows, new seasons will appear here.</p></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -269,7 +269,7 @@ func UpcomingSeasonCard(item database.GetUpcomingSeasonsRow) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -287,7 +287,7 @@ func UpcomingSeasonCard(item database.GetUpcomingSeasonsRow) templ.Component {
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</div><div class=\"notification-meta\"><span class=\"notification-broadcast\" style=\"color: var(--text-muted) !important;\">because you watched ") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</div><div class=\"notification-meta\"><span class=\"notification-broadcast\" style=\"color: var(--text-muted) !important;\">Because you watched ")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -388,7 +388,7 @@ func NotificationCard(item WatchingAnimeWithDetails) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -7,17 +7,17 @@ import "strings"
templ Schedule() { templ Schedule() {
@Layout("mal - schedule") { @Layout("mal - schedule") {
<div class="schedule-page"> <div class="schedule-page">
<h1>weekly schedule</h1> <h1>Weekly schedule</h1>
<p class="schedule-subtitle">airing times in JST</p> <p class="schedule-subtitle">Airing times in JST</p>
<div class="schedule-tabs"> <div class="schedule-tabs">
<button class="schedule-tab active" data-day="monday" onclick="loadDay('monday', this)">mon</button> <button class="schedule-tab active" data-day="Monday" onclick="loadDay('monday', this)">Mon</button>
<button class="schedule-tab" data-day="tuesday" onclick="loadDay('tuesday', this)">tue</button> <button class="schedule-tab" data-day="Tuesday" onclick="loadDay('tuesday', this)">Tue</button>
<button class="schedule-tab" data-day="wednesday" onclick="loadDay('wednesday', this)">wed</button> <button class="schedule-tab" data-day="Wednesday" onclick="loadDay('wednesday', this)">Wed</button>
<button class="schedule-tab" data-day="thursday" onclick="loadDay('thursday', this)">thu</button> <button class="schedule-tab" data-day="Thursday" onclick="loadDay('thursday', this)">Thu</button>
<button class="schedule-tab" data-day="friday" onclick="loadDay('friday', this)">fri</button> <button class="schedule-tab" data-day="Friday" onclick="loadDay('friday', this)">Fri</button>
<button class="schedule-tab" data-day="saturday" onclick="loadDay('saturday', this)">sat</button> <button class="schedule-tab" data-day="Saturday" onclick="loadDay('saturday', this)">Sat</button>
<button class="schedule-tab" data-day="sunday" onclick="loadDay('sunday', this)">sun</button> <button class="schedule-tab" data-day="Sunday" onclick="loadDay('sunday', this)">Sun</button>
</div> </div>
<div id="schedule-content" hx-get="/api/schedule?day=monday" hx-trigger="load"> <div id="schedule-content" hx-get="/api/schedule?day=monday" hx-trigger="load">
@@ -25,7 +25,7 @@ templ Schedule() {
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<div class="loading-dot"></div> <div class="loading-dot"></div>
<span>loading schedule</span> <span>Loading schedule</span>
</div> </div>
</div> </div>
</div> </div>
@@ -44,7 +44,7 @@ templ ScheduleDay(day string, animes []jikan.Anime) {
<div class="schedule-day"> <div class="schedule-day">
<h2>{ strings.Title(day) }</h2> <h2>{ strings.Title(day) }</h2>
if len(animes) == 0 { if len(animes) == 0 {
<p class="no-anime">no anime scheduled</p> <p class="no-anime">No anime scheduled.</p>
} else { } else {
<div class="schedule-grid"> <div class="schedule-grid">
for _, anime := range animes { for _, anime := range animes {
@@ -61,7 +61,7 @@ templ ScheduleAnimeCard(anime jikan.Anime) {
if anime.ImageURL() != "" { if anime.ImageURL() != "" {
<img src={ anime.ImageURL() } alt={ anime.DisplayTitle() } loading="lazy"/> <img src={ anime.ImageURL() } alt={ anime.DisplayTitle() } loading="lazy"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
</div> </div>
<div class="schedule-card-info"> <div class="schedule-card-info">

View File

@@ -45,7 +45,7 @@ func Schedule() templ.Component {
}() }()
} }
ctx = templ.InitializeContext(ctx) ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"schedule-page\"><h1>weekly schedule</h1><p class=\"schedule-subtitle\">airing times in JST</p><div class=\"schedule-tabs\"><button class=\"schedule-tab active\" data-day=\"monday\" onclick=\"loadDay('monday', this)\">mon</button> <button class=\"schedule-tab\" data-day=\"tuesday\" onclick=\"loadDay('tuesday', this)\">tue</button> <button class=\"schedule-tab\" data-day=\"wednesday\" onclick=\"loadDay('wednesday', this)\">wed</button> <button class=\"schedule-tab\" data-day=\"thursday\" onclick=\"loadDay('thursday', this)\">thu</button> <button class=\"schedule-tab\" data-day=\"friday\" onclick=\"loadDay('friday', this)\">fri</button> <button class=\"schedule-tab\" data-day=\"saturday\" onclick=\"loadDay('saturday', this)\">sat</button> <button class=\"schedule-tab\" data-day=\"sunday\" onclick=\"loadDay('sunday', this)\">sun</button></div><div id=\"schedule-content\" hx-get=\"/api/schedule?day=monday\" hx-trigger=\"load\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>loading schedule</span></div></div></div><script>\n\t\t\tfunction loadDay(day, btn) {\n\t\t\t\tdocument.querySelectorAll('.schedule-tab').forEach(t => t.classList.remove('active'));\n\t\t\t\tbtn.classList.add('active');\n\t\t\t\thtmx.ajax('GET', '/api/schedule?day=' + day, '#schedule-content');\n\t\t\t}\n\t\t</script>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"schedule-page\"><h1>Weekly schedule</h1><p class=\"schedule-subtitle\">Airing times in JST</p><div class=\"schedule-tabs\"><button class=\"schedule-tab active\" data-day=\"Monday\" onclick=\"loadDay('monday', this)\">Mon</button> <button class=\"schedule-tab\" data-day=\"Tuesday\" onclick=\"loadDay('tuesday', this)\">Tue</button> <button class=\"schedule-tab\" data-day=\"Wednesday\" onclick=\"loadDay('wednesday', this)\">Wed</button> <button class=\"schedule-tab\" data-day=\"Thursday\" onclick=\"loadDay('thursday', this)\">Thu</button> <button class=\"schedule-tab\" data-day=\"Friday\" onclick=\"loadDay('friday', this)\">Fri</button> <button class=\"schedule-tab\" data-day=\"Saturday\" onclick=\"loadDay('saturday', this)\">Sat</button> <button class=\"schedule-tab\" data-day=\"Sunday\" onclick=\"loadDay('sunday', this)\">Sun</button></div><div id=\"schedule-content\" hx-get=\"/api/schedule?day=monday\" hx-trigger=\"load\"><div class=\"loading-indicator\"><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><div class=\"loading-dot\"></div><span>Loading schedule</span></div></div></div><script>\n\t\t\tfunction loadDay(day, btn) {\n\t\t\t\tdocument.querySelectorAll('.schedule-tab').forEach(t => t.classList.remove('active'));\n\t\t\t\tbtn.classList.add('active');\n\t\t\t\thtmx.ajax('GET', '/api/schedule?day=' + day, '#schedule-content');\n\t\t\t}\n\t\t</script>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -98,7 +98,7 @@ func ScheduleDay(day string, animes []jikan.Anime) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
if len(animes) == 0 { if len(animes) == 0 {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "<p class=\"no-anime\">no anime scheduled</p>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "<p class=\"no-anime\">No anime scheduled.</p>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -196,7 +196,7 @@ func ScheduleAnimeCard(anime jikan.Anime) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -10,18 +10,18 @@ type SortFilterOptions struct {
templ SortFilter(opts SortFilterOptions) { templ SortFilter(opts SortFilterOptions) {
<div class="sort-filter"> <div class="sort-filter">
<div class="sort-filter-group"> <div class="sort-filter-group">
<label for="sort-select">sort by</label> <label for="sort-select">Sort by</label>
<select id="sort-select" class="sort-filter-select" onchange="document.getElementById('sort-input').value = this.value; document.getElementById('sort-form').submit()"> <select id="sort-select" class="sort-filter-select" onchange="document.getElementById('sort-input').value = this.value; document.getElementById('sort-form').submit()">
<option value="date" selected?={ opts.Sort == "date" }>date added</option> <option value="date" selected?={ opts.Sort == "date" }>Date added</option>
<option value="title" selected?={ opts.Sort == "title" }>title</option> <option value="title" selected?={ opts.Sort == "title" }>Title</option>
<option value="score" selected?={ opts.Sort == "score" }>score</option> <option value="score" selected?={ opts.Sort == "score" }>Score</option>
</select> </select>
</div> </div>
<div class="sort-filter-group"> <div class="sort-filter-group">
<label for="order-select">order</label> <label for="order-select">Order</label>
<select id="order-select" class="sort-filter-select" onchange="document.getElementById('order-input').value = this.value; document.getElementById('sort-form').submit()"> <select id="order-select" class="sort-filter-select" onchange="document.getElementById('order-input').value = this.value; document.getElementById('sort-form').submit()">
<option value="desc" selected?={ opts.Order == "desc" }>descending</option> <option value="desc" selected?={ opts.Order == "desc" }>Descending</option>
<option value="asc" selected?={ opts.Order == "asc" }>ascending</option> <option value="asc" selected?={ opts.Order == "asc" }>Ascending</option>
</select> </select>
</div> </div>
</div> </div>

View File

@@ -36,7 +36,7 @@ func SortFilter(opts SortFilterOptions) templ.Component {
templ_7745c5c3_Var1 = templ.NopComponent templ_7745c5c3_Var1 = templ.NopComponent
} }
ctx = templ.ClearChildren(ctx) ctx = templ.ClearChildren(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"sort-filter\"><div class=\"sort-filter-group\"><label for=\"sort-select\">sort by</label> <select id=\"sort-select\" class=\"sort-filter-select\" onchange=\"document.getElementById('sort-input').value = this.value; document.getElementById('sort-form').submit()\"><option value=\"date\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"sort-filter\"><div class=\"sort-filter-group\"><label for=\"sort-select\">Sort by</label> <select id=\"sort-select\" class=\"sort-filter-select\" onchange=\"document.getElementById('sort-input').value = this.value; document.getElementById('sort-form').submit()\"><option value=\"date\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -46,7 +46,7 @@ func SortFilter(opts SortFilterOptions) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, ">date added</option> <option value=\"title\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, ">Date added</option> <option value=\"title\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -56,7 +56,7 @@ func SortFilter(opts SortFilterOptions) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, ">title</option> <option value=\"score\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, ">Title</option> <option value=\"score\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -66,7 +66,7 @@ func SortFilter(opts SortFilterOptions) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, ">score</option></select></div><div class=\"sort-filter-group\"><label for=\"order-select\">order</label> <select id=\"order-select\" class=\"sort-filter-select\" onchange=\"document.getElementById('order-input').value = this.value; document.getElementById('sort-form').submit()\"><option value=\"desc\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, ">Score</option></select></div><div class=\"sort-filter-group\"><label for=\"order-select\">Order</label> <select id=\"order-select\" class=\"sort-filter-select\" onchange=\"document.getElementById('order-input').value = this.value; document.getElementById('sort-form').submit()\"><option value=\"desc\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -76,7 +76,7 @@ func SortFilter(opts SortFilterOptions) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, ">descending</option> <option value=\"asc\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, ">Descending</option> <option value=\"asc\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -86,7 +86,7 @@ func SortFilter(opts SortFilterOptions) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, ">ascending</option></select></div></div><form id=\"sort-form\" method=\"get\" style=\"display: none;\"><input type=\"hidden\" name=\"sort\" id=\"sort-input\" value=\"") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, ">Ascending</option></select></div></div><form id=\"sort-form\" method=\"get\" style=\"display: none;\"><input type=\"hidden\" name=\"sort\" id=\"sort-input\" value=\"")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

View File

@@ -8,10 +8,10 @@ import (
templ Watchlist(entries []database.GetUserWatchListRow, layout string, currentStatus string, sortBy string, sortOrder string) { templ Watchlist(entries []database.GetUserWatchListRow, layout string, currentStatus string, sortBy string, sortOrder string) {
@Layout("My Watchlist") { @Layout("My Watchlist") {
<div class="watchlist-header"> <div class="watchlist-header">
<h2>watchlist</h2> <h2>Watchlist</h2>
<div class="watchlist-controls"> <div class="watchlist-controls">
<a href="/api/watchlist/export" class="text-link">export</a> <a href="/api/watchlist/export" class="text-link">export</a>
<button class="text-link" onclick="document.getElementById('import-file').click()">import</button> <button class="text-link" onclick="document.getElementById('import-file').click()">Import</button>
<form id="import-form" hx-post="/api/watchlist/import" hx-encoding="multipart/form-data" style="display: none;"> <form id="import-form" hx-post="/api/watchlist/import" hx-encoding="multipart/form-data" style="display: none;">
<input type="file" id="import-file" name="file" accept=".json" onchange="htmx.trigger('#import-form', 'submit')"/> <input type="file" id="import-file" name="file" accept=".json" onchange="htmx.trigger('#import-form', 'submit')"/>
</form> </form>
@@ -23,12 +23,12 @@ templ Watchlist(entries []database.GetUserWatchListRow, layout string, currentSt
</div> </div>
<div class="status-tabs"> <div class="status-tabs">
<a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=all&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "all") }>all</a> <a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=all&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "all") }>all</a>
<a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=watching&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "watching") }>watching</a> <a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=watching&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "watching") }>Watching</a>
<a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=continuing&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "continuing") }>continuing</a> <a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=continuing&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "continuing") }>continuing</a>
<a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=on_hold&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "on_hold") }>on hold</a> <a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=on_hold&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "on_hold") }>On hold</a>
<a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=plan_to_watch&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "plan_to_watch") }>plan to watch</a> <a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=plan_to_watch&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "plan_to_watch") }>Plan to watch</a>
<a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=dropped&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "dropped") }>dropped</a> <a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=dropped&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "dropped") }>Dropped</a>
<a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=completed&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "completed") }>completed</a> <a href={ templ.URL(fmt.Sprintf("/watchlist?view=%s&status=completed&sort=%s&order=%s", layout, sortBy, sortOrder)) } class={ tabClass(currentStatus == "completed") }>Completed</a>
</div> </div>
@SortFilter(SortFilterOptions{Sort: sortBy, Order: sortOrder, View: layout, Status: currentStatus}) @SortFilter(SortFilterOptions{Sort: sortBy, Order: sortOrder, View: layout, Status: currentStatus})
if len(entries) == 0 { if len(entries) == 0 {
@@ -53,7 +53,7 @@ templ Watchlist(entries []database.GetUserWatchListRow, layout string, currentSt
if entry.ImageUrl != "" { if entry.ImageUrl != "" {
<img src={ entry.ImageUrl } alt={ entry.DisplayTitle() } class="catalog-thumb" loading="lazy"/> <img src={ entry.ImageUrl } alt={ entry.DisplayTitle() } class="catalog-thumb" loading="lazy"/>
} else { } else {
<div class="no-image">no image</div> <div class="no-image">No image</div>
} }
</a> </a>
<div class="catalog-title">{ entry.DisplayTitle() }</div> <div class="catalog-title">{ entry.DisplayTitle() }</div>
@@ -71,7 +71,7 @@ templ Watchlist(entries []database.GetUserWatchListRow, layout string, currentSt
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
<th>title</th> <th>Title</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>

View File

@@ -46,7 +46,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
}() }()
} }
ctx = templ.InitializeContext(ctx) ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"watchlist-header\"><h2>watchlist</h2><div class=\"watchlist-controls\"><a href=\"/api/watchlist/export\" class=\"text-link\">export</a> <button class=\"text-link\" onclick=\"document.getElementById('import-file').click()\">import</button><form id=\"import-form\" hx-post=\"/api/watchlist/import\" hx-encoding=\"multipart/form-data\" style=\"display: none;\"><input type=\"file\" id=\"import-file\" name=\"file\" accept=\".json\" onchange=\"htmx.trigger('#import-form', 'submit')\"></form><div class=\"view-toggle\">") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"watchlist-header\"><h2>Watchlist</h2><div class=\"watchlist-controls\"><a href=\"/api/watchlist/export\" class=\"text-link\">export</a> <button class=\"text-link\" onclick=\"document.getElementById('import-file').click()\">Import</button><form id=\"import-form\" hx-post=\"/api/watchlist/import\" hx-encoding=\"multipart/form-data\" style=\"display: none;\"><input type=\"file\" id=\"import-file\" name=\"file\" accept=\".json\" onchange=\"htmx.trigger('#import-form', 'submit')\"></form><div class=\"view-toggle\">")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -186,7 +186,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\">watching</a> ") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\">Watching</a> ")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -256,7 +256,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\">on hold</a> ") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\">On hold</a> ")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -291,7 +291,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "\">plan to watch</a> ") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "\">Plan to watch</a> ")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -326,7 +326,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\">dropped</a> ") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\">Dropped</a> ")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -361,7 +361,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\">completed</a></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\">Completed</a></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -467,7 +467,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<div class=\"no-image\">no image</div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<div class=\"no-image\">No image</div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
@@ -521,7 +521,7 @@ func Watchlist(entries []database.GetUserWatchListRow, layout string, currentSta
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} else { } else {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<table class=\"watchlist-table\"><thead><tr><th></th><th>title</th><th></th></tr></thead> <tbody>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<table class=\"watchlist-table\"><thead><tr><th></th><th>Title</th><th></th></tr></thead> <tbody>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }