Index page
This commit is contained in:
parent
0fb7d6f66c
commit
64791ba19b
2
go.mod
2
go.mod
|
@ -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
4
go.sum
|
@ -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=
|
||||
|
|
1
main.go
1
main.go
|
@ -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)
|
||||
|
|
|
@ -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
9
pages/index.go
Normal 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})
|
||||
}
|
|
@ -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()
|
||||
})
|
||||
}
|
|
@ -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"> ⧉ </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"> ⧉ </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
164
views/pages/temp.jet.html
Normal 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"> ⧉ </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"> ⧉ </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 }}
|
Loading…
Reference in a new issue