Index page

This commit is contained in:
VnPower 2024-01-20 16:06:58 +07:00
parent 0fb7d6f66c
commit 64791ba19b
No known key found for this signature in database
GPG key ID: 901B79C49BAD6E6A
8 changed files with 180 additions and 219 deletions

2
go.mod
View file

@ -4,7 +4,7 @@ go 1.21
require (
github.com/goccy/go-json v0.10.2
github.com/gofiber/fiber/v2 v2.51.0
github.com/gofiber/fiber/v2 v2.52.0
github.com/gofiber/template/jet/v2 v2.1.6
github.com/tidwall/gjson v1.17.0
golang.org/x/net v0.17.0

4
go.sum
View file

@ -6,8 +6,8 @@ github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sx
github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/gofiber/fiber/v2 v2.51.0 h1:JNACcZy5e2tGApWB2QrRpenTWn0fq0hkFm6k0C86gKQ=
github.com/gofiber/fiber/v2 v2.51.0/go.mod h1:xaQRZQJGqnKOQnbQw+ltvku3/h8QxvNi8o6JiJ7Ll0U=
github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE=
github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
github.com/gofiber/template v1.8.2 h1:PIv9s/7Uq6m+Fm2MDNd20pAFFKt5wWs7ZBd8iV9pWwk=
github.com/gofiber/template v1.8.2/go.mod h1:bs/2n0pSNPOkRa5VJ8zTIvedcI/lEYxzV3+YPXdBvq8=
github.com/gofiber/template/jet/v2 v2.1.6 h1:PdNovaGkkMhygGW3NFHPgiq3PtMQxllvGlcUX+MsTok=

View file

@ -105,6 +105,7 @@ func main() {
// Routes
server.Get("/", pages.IndexPage)
server.Get("about", pages.AboutPage)
server.Get("newest", pages.NewestPage)
server.Get("discovery", pages.DiscoveryPage)

View file

@ -11,7 +11,7 @@ import (
func ArtworkPage(c *fiber.Ctx) error {
id := c.Params("id")
if _, err := strconv.Atoi(id); err != nil {
return errors.New("Bad id")
return errors.New("Invalid ID.")
}
illust, err := core.GetArtworkByID(c, id)

9
pages/index.go Normal file
View file

@ -0,0 +1,9 @@
package pages
import (
"github.com/gofiber/fiber/v2"
)
func IndexPage(c *fiber.Ctx) error {
return c.Render("pages/index", fiber.Map{"Title": "Landing", "Token": false})
}

View file

@ -1,54 +0,0 @@
package serve
import (
"github.com/goccy/go-json"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cache"
"github.com/gofiber/fiber/v2/middleware/compress"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/recover"
"time"
)
func ServerSetup() {
server := fiber.New(fiber.Config{
AppName: "PixivFE",
DisableStartupMessage: true,
JSONEncoder: json.Marshal,
JSONDecoder: json.Unmarshal,
EnableTrustedProxyCheck: true,
TrustedProxies: []string{"0.0.0.0/0"},
ProxyHeader: fiber.HeaderXForwardedFor,
})
server.Use(logger.New(logger.Config{
Format: "[${time} | ${ip}] ${status} ${path}",
}))
server.Use(cache.New(
cache.Config{
Expiration: 5 * time.Minute,
CacheControl: true,
// KeyGenerator: func(c *fiber.Ctx) string {
// return utils.CopyString(c.OriginalURL())
// },
},
))
server.Use(recover.New())
server.Use(compress.New(compress.Config{
Level: compress.LevelBestSpeed, // 1
}))
// Global headers (from GotHub)
server.Use(func(c *fiber.Ctx) error {
c.Set("X-Frame-Options", "SAMEORIGIN")
c.Set("X-XSS-Protection", "1; mode=block")
c.Set("X-Content-Type-Options", "nosniff")
c.Set("Referrer-Policy", "no-referrer")
c.Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload")
return c.Next()
})
}

View file

@ -1,163 +1,4 @@
<div class="container">
{{ if Token }}
<div class="switcher">
<span class="switch-title">Filter</span>
<a href="/?mode=all" class="switch-button">All</a>
<a href="/?mode=r18" class="switch-button">R-18</a>
</div>
<div class="component-header">
<h2>Newest works by users you follow</h2>
<a href="/self/following_works">See more</a>
</div>
<div class="artwork-container-scroll">
{{ include "components/small-tn" Artworks.Following }}
</div>
<br />
<h2>Recently completed commissions</h2>
<div class="artwork-container">
{{ include "components/small-tn" Artworks.Commissions }}
</div>
<br />
<h2>Recommended works</h2>
<div class="artwork-container">
{{ include "components/small-tn" Artworks.Recommended }}
</div>
<br />
<div class="component-header">
<h2>Daily rankings</h2>
<a href="/ranking">See more</a>
</div>
<div class="artwork-container-scroll">
{{ range rank := Artworks.Rankings }}
<div class="artwork-large artwork">
<div class="artwork-additional">
<div class="artwork-position">{{ rank + 1 }}</div>
{{ if .Pages > 1 }}
<div class="artwork-page-count">
<span class="boxbox"> &boxbox;&nbsp; </span>
<span>2</span>
</div>
{{ end }}
</div>
<a href="/artworks/{{ .ID }}">
<img src="{{ .Thumbnail }}" alt="{{ .Title }}" />
</a>
<div class="artwork-title">
<a href="/artworks/{{ .ID }}"> {{ .Title }} </a>
</div>
<div class="artwork-author">
<a href="/users/{{ .ArtistID }}">
<img
src="{{ .ArtistAvatar }}"
alt="{{ .ArtistName }}"
class="artwork-thumbnail-artist-avatar border-rounded"
/>
<span>{{ .ArtistName }}</span></a
>
</div>
</div>
{{ end }}
</div>
<br />
<!-- <h2>Pixivision</h2>
<div class="thumbnail-container">
{{ range Artworks.Pixivision }}
<a href="{{ .URL }}" class="spotlight-thumbnail">
<img
src="{{ .Thumbnail }}"
alt="{{ .Title }}"
class="spotlight-master-image"
/>
<div class="spotlight-title-wrapper">
<h2 class="spotlight-title">{{ .Title }}</h2>
</div>
</a>
{{ end }}
</div>
<br /> -->
<h2>Works by recommended users</h2>
<div class="artwork-container">
{{ include "components/small-tn" Artworks.Users }}
</div>
<br />
{{ range Artworks.RecommendByTags }}
<h2>Recommended illustrations tagged #{{.Name}}</h2>
<div class="artwork-container">
{{ include "components/small-tn" .Artworks }}
</div>
<br />
{{ end }}
<h2>Newest works</h2>
<div class="artwork-container-scroll">
{{ include "components/small-tn" Artworks.Newest }}
</div>
{{ else }}
<p><a href="/login">Login</a> to access more features!</p>
<p>
Enjoying this frontend so far? I need your opinions and ideas to improve
this UI! Share them
<a href="https://codeberg.org/VnPower/pixivfe/issues/21">here</a>!
</p>
<div class="component-header">
<h2>Daily rankings</h2>
<a href="/ranking">See more</a>
</div>
<div class="artwork-container-scroll">
{{ range rank := Artworks.Rankings }}
<div class="artwork-large artwork">
<div class="artwork-additional">
<div class="artwork-position">{{ rank + 1 }}</div>
{{ if .Pages > 1 }}
<div class="artwork-page-count">
<span class="boxbox"> &boxbox;&nbsp; </span>
<span>2</span>
</div>
{{ end }}
</div>
<a href="/artworks/{{ .ID }}">
<img src="{{ .Thumbnail }}" alt="{{ .Title }}" />
</a>
<div class="artwork-title">
<a href="/artworks/{{ .ID }}"> {{ .Title }} </a>
</div>
<div class="artwork-author">
<a href="/users/{{ .ArtistID }}">
<img
src="{{ .ArtistAvatar }}"
alt="{{ .ArtistName }}"
class="artwork-thumbnail-artist-avatar border-rounded"
/>
<span>{{ .ArtistName }}</span></a
>
</div>
</div>
{{ end }}
</div>
<br />
<!-- <h2>Pixivision</h2>
<div class="thumbnail-container">
{{ range Artworks.Pixivision }}
<a href="{{ .URL }}" class="spotlight-thumbnail">
<img
src="{{ .Thumbnail }}"
alt="{{ .Title }}"
class="spotlight-master-image"
/>
<div class="spotlight-title-wrapper">
<h2 class="spotlight-title">{{ .Title }}</h2>
</div>
</a>
{{ end }}
</div>
<br /> -->
{{ end }}
<h2>Welcome!</h2>
<p>Please check out the sidebar for more features. <br>There used to be a small ranking container here... but I am planning to add more than just that!</p>
</div>

164
views/pages/temp.jet.html Normal file
View file

@ -0,0 +1,164 @@
{{ if Token }}
<div class="switcher">
<span class="switch-title">Filter</span>
<a href="/?mode=all" class="switch-button">All</a>
<a href="/?mode=r18" class="switch-button">R-18</a>
</div>
<div class="component-header">
<h2>Newest works by users you follow</h2>
<a href="/self/following_works">See more</a>
</div>
<div class="artwork-container-scroll">
{{ include "components/small-tn" Artworks.Following }}
</div>
<br />
<h2>Recently completed commissions</h2>
<div class="artwork-container">
{{ include "components/small-tn" Artworks.Commissions }}
</div>
<br />
<h2>Recommended works</h2>
<div class="artwork-container">
{{ include "components/small-tn" Artworks.Recommended }}
</div>
<br />
<div class="component-header">
<h2>Daily rankings</h2>
<a href="/ranking">See more</a>
</div>
<div class="artwork-container-scroll">
{{ range rank := Artworks.Rankings }}
<div class="artwork-large artwork">
<div class="artwork-additional">
<div class="artwork-position">{{ rank + 1 }}</div>
{{ if .Pages > 1 }}
<div class="artwork-page-count">
<span class="boxbox"> &boxbox;&nbsp; </span>
<span>2</span>
</div>
{{ end }}
</div>
<a href="/artworks/{{ .ID }}">
<img src="{{ .Thumbnail }}" alt="{{ .Title }}" />
</a>
<div class="artwork-title">
<a href="/artworks/{{ .ID }}"> {{ .Title }} </a>
</div>
<div class="artwork-author">
<a href="/users/{{ .ArtistID }}">
<img
src="{{ .ArtistAvatar }}"
alt="{{ .ArtistName }}"
class="artwork-thumbnail-artist-avatar border-rounded"
/>
<span>{{ .ArtistName }}</span></a
>
</div>
</div>
{{ end }}
</div>
<br />
<!-- <h2>Pixivision</h2>
<div class="thumbnail-container">
{{ range Artworks.Pixivision }}
<a href="{{ .URL }}" class="spotlight-thumbnail">
<img
src="{{ .Thumbnail }}"
alt="{{ .Title }}"
class="spotlight-master-image"
/>
<div class="spotlight-title-wrapper">
<h2 class="spotlight-title">{{ .Title }}</h2>
</div>
</a>
{{ end }}
</div>
<br /> -->
<h2>Works by recommended users</h2>
<div class="artwork-container">
{{ include "components/small-tn" Artworks.Users }}
</div>
<br />
{{ range Artworks.RecommendByTags }}
<h2>Recommended illustrations tagged #{{.Name}}</h2>
<div class="artwork-container">
{{ include "components/small-tn" .Artworks }}
</div>
<br />
{{ end }}
<h2>Welcome!</h2>
<p>Please check out the sidebar for more features. There used to be a small ranking container here...</p>
<!-- <h2>Newest works</h2>
<div class="artwork-container-scroll">
{{ include "components/small-tn" Artworks.Newest }}
</div>
{{ else }}
<p><a href="/login">Login</a> to access more features!</p>
<p>
Enjoying this frontend so far? I need your opinions and ideas to improve
this UI! Share them
<a href="https://codeberg.org/VnPower/pixivfe/issues/21">here</a>!
</p>
<div class="component-header">
<h2>Daily rankings</h2>
<a href="/ranking">See more</a>
</div>
<div class="artwork-container-scroll">
{{ range rank := Artworks.Rankings }}
<div class="artwork-large artwork">
<div class="artwork-additional">
<div class="artwork-position">{{ rank + 1 }}</div>
{{ if .Pages > 1 }}
<div class="artwork-page-count">
<span class="boxbox"> &boxbox;&nbsp; </span>
<span>2</span>
</div>
{{ end }}
</div>
<a href="/artworks/{{ .ID }}">
<img src="{{ .Thumbnail }}" alt="{{ .Title }}" />
</a>
<div class="artwork-title">
<a href="/artworks/{{ .ID }}"> {{ .Title }} </a>
</div>
<div class="artwork-author">
<a href="/users/{{ .ArtistID }}">
<img
src="{{ .ArtistAvatar }}"
alt="{{ .ArtistName }}"
class="artwork-thumbnail-artist-avatar border-rounded"
/>
<span>{{ .ArtistName }}</span></a
>
</div>
</div>
{{ end }}
</div>
<br /> -->
<!-- <h2>Pixivision</h2>
<div class="thumbnail-container">
{{ range Artworks.Pixivision }}
<a href="{{ .URL }}" class="spotlight-thumbnail">
<img
src="{{ .Thumbnail }}"
alt="{{ .Title }}"
class="spotlight-master-image"
/>
<div class="spotlight-title-wrapper">
<h2 class="spotlight-title">{{ .Title }}</h2>
</div>
</a>
{{ end }}
</div>
<br /> -->
{{ end }}