necessário

This commit is contained in:
silva guimaraes 2025-07-24 19:31:03 -03:00
parent 92b0a902ca
commit 7edb0a17ed
5 changed files with 199 additions and 162 deletions

View file

@ -6,6 +6,7 @@ import (
"goreader/gallery"
"goreader/state"
"strconv"
"strings"
"github.com/silva-guimaraes/gtag"
)
@ -37,15 +38,22 @@ func tag(t gallery.Tag, state *state.State) *gtag.Tag {
backgroundClass = "female"
}
d := gtag.New("a").
Href("javascript:void(0)").
Class("tag").
SetAttr("hx-post", fmt.Sprintf("/filter/%s/%s", t.Name, t.Sex)).
SetAttr("hx-target", "#listing").
SetAttr("hx-swap", "outerHTML")
Href(fmt.Sprintf("javascript:filter_tags('%s')", strings.TrimSpace(t.Name) /* FIXME */)).
Class("tag")
{
d.Tag("span").Text(gender).Class("name", backgroundClass)
d.Tag("span").Text(t.Name).Class("name")
d.Tag("span").Text(strconv.Itoa(state.UniqueTags[t])).Class("name", backgroundClass)
d.Tag("span").Text(strconv.Itoa(state.UniqueTags[t.Name])).Class("name", backgroundClass)
}
return d
}
func artistTag(artistName string) *gtag.Tag {
d := gtag.New("a").
Href(fmt.Sprintf("javascript:filter_artist('%s')", artistName /* FIXME */)).
Class("tag")
{
d.Tag("span").Text(artistName).Class("name")
}
return d
}
@ -55,7 +63,8 @@ func thumbnail(src string) *gtag.Tag {
}
func fullThumbnail(g gallery.Gallery) *gtag.Tag {
return thumbnail(fmt.Sprintf("/page/%s/1", g.Uuid()))
thumb := thumbnail(fmt.Sprintf("/page/%s/1", g.Uuid()))
return gtag.Div().Id("image-wrapper").Append(thumb)
}
func smallThumbnail(g gallery.Gallery) *gtag.Tag {
@ -71,9 +80,21 @@ func InspectorInfo(g gallery.Gallery, state *state.State) *gtag.Tag {
d.Tag("a").
SetAttr("href", fmt.Sprintf("/read/%s", g.Uuid())).
SetAttr("hx-boost", "false").
SetAttr("style", "color: white").
Tag("h1").Text(g.Name())
d.Tag("h2").Text(g.JpName())
Tag("h1").
SetAttr("style", "color: white; margin: 10px 0 10px 0;").
Text(g.Name())
d.Tag("h2").Style("margin: 0").Text(g.JpName())
d.Tag("h3").
Text(fmt.Sprintf("Pages: %d", len(g.Images()))).
Style("font-size: 14px; ; margin: 0;")
d.Tag("h2").Text("Artists")
artists := d.Div()
{
for _, a := range g.Artists() {
artists.Append(artistTag(a))
}
}
d.Tag("h2").Text("Tags")
tags := d.Div()
{
for _, t := range g.Tags() {
@ -85,10 +106,16 @@ func InspectorInfo(g gallery.Gallery, state *state.State) *gtag.Tag {
}
func cover(g gallery.Gallery) *gtag.Tag {
var s []string
for _, tag := range g.Tags() {
s = append(s, fmt.Sprintf("'%s'", strings.TrimSpace(tag.Name)) /* FIXME */)
}
dataset := fmt.Sprintf("[%s]", strings.Join(s, ", "))
a := gtag.New("a").
Class("cover").
Id(fmt.Sprintf("cover-%s", g.Uuid())).
SetAttr("href", fmt.Sprintf("/read/%s", g.Uuid())).
SetAttr("data-tags", dataset).
SetAttr("hx-get", fmt.Sprintf("/details/%s", g.Uuid())).
SetAttr("onmouseenter", "inspectSetTimeout(event)").
SetAttr("onmouseleave", "inspectClearTimeout(event)").
@ -101,22 +128,19 @@ func cover(g gallery.Gallery) *gtag.Tag {
return a
}
const galleriesPerPage = 50
const galleriesPerPage = 70
func SearchResults(galleries []gallery.Gallery, page int) *gtag.Tag {
glm := max(len(galleries)-1, 0)
recent := galleries[min(page*galleriesPerPage, glm):min((page+1)*galleriesPerPage, glm)]
m := gtag.New("main")
// HTMX faz com que isso receba [InspectorInfo] quando usuário paira o
// mouse sobre algum cover
m.Tag("section").Id("inspector")
results := m.Tag("section").Id("results")
func SearchResults(galleries []gallery.Gallery) *gtag.Tag {
s := gtag.New("section")
results := s.Tag("section").Id("results")
{
for _, g := range recent {
results.Append(cover(g))
results.Tag("header").Tag("h1").Text(fmt.Sprintf("Listing %d Galleries", len(galleries)))
covers := results.Tag("main")
for _, g := range galleries {
covers.Append(cover(g))
}
}
return m
return s
}
func Stats(state *state.State) *gtag.Tag {
@ -153,80 +177,18 @@ func Index(state *state.State, page int) *gtag.Tag {
{
nav := body.Tag("nav").Class("container")
{
nav.Tag("a").
Href("javascript:clear_filters()").
Text("clear filters")
nav.Div().Text("omakase v1")
}
center := body.Div().Id("center")
{
top := center.Tag("div").Class("top")
{
top.Div().Id("search-bar").VoidTag("input").
Class("ask-input").
SetAttr("type", "search").
SetAttr("name", "search").
SetAttr("autocomplete", "false").
SetAttr("placeholder", "Slash to search...").
SetAttr("hx-post", "/search").
SetAttr("hx-trigger", "input changed delay:50ms, search").
SetAttr("hx-target", "#search-results")
header := top.Tag("header").Class("container")
{
header.Div().Id("omakase").
Tag("a").
SetAttr("href", "/random").
Text("おまかせ").
SetAttr("target", "_blank")
header.Tag("hr").Style("opacity: 0.2;")
header.Append(Stats(state))
}
}
ret := center.Tag("main").Id("search-results")
{
controls := ret.Tag("section").AddClass("container").Id("controls")
{
paging := controls.Div()
{
maxPages := len(state.Galleries) / galleriesPerPage
previousPage := gtag.New("a").
AddClass("page-control").
Text("<")
if page > 1 {
previousPage.SetAttr("href",
fmt.Sprintf("?page=%d", page-1),
)
}
paging.Append(previousPage)
p := page
for ; p < min(page+3, maxPages); p++ {
paging.Tag("a").
AddClass("page-control").
SetAttr("href",
fmt.Sprintf("?page=%d", p),
).Text(fmt.Sprint(p))
}
if len(state.Galleries) > 0 && p != maxPages {
paging.Tag("span").Text("...")
}
paging.Tag("a").
AddClass("page-control").
SetAttr("href",
fmt.Sprintf("?page=%d", maxPages),
).Text(fmt.Sprint(maxPages))
nextPage := gtag.New("a").
AddClass("page-control").
SetAttr("href", "?page=1").
Text(">")
if page < maxPages {
nextPage.SetAttr("href",
fmt.Sprintf("?page=%d", page+1),
)
} else if page == maxPages {
nextPage.SetAttr("disabled", "true")
}
paging.Append(nextPage)
}
}
ret.Append(SearchResults(state.Galleries, page))
}
d := center.Div()
// HTMX faz com que isso receba [InspectorInfo] quando usuário paira o
// mouse sobre algum cover
d.Tag("section").Id("inspector")
d.Append(SearchResults(state.Galleries))
}
body.Tag("footer").P().Text(randomQuote())
body.Tag("script").Asis(indexJavascript)