Added frontpage and Google login
This commit is contained in:
parent
938057a626
commit
2d8d8299ef
BIN
images/login/facebook.png
Normal file
BIN
images/login/facebook.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
BIN
images/login/google.png
Normal file
BIN
images/login/google.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
BIN
images/login/twitter.png
Normal file
BIN
images/login/twitter.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.6 KiB |
13
layout/layout.go
Normal file
13
layout/layout.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package layout
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aerogo/aero"
|
||||||
|
"github.com/animenotifier/notify.moe/components"
|
||||||
|
"github.com/animenotifier/notify.moe/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Render layout.
|
||||||
|
func Render(ctx *aero.Context, content string) string {
|
||||||
|
user := utils.GetUser(ctx)
|
||||||
|
return components.Layout(ctx.App, user, content)
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
component Layout(app *aero.Application, content string)
|
component Layout(app *aero.Application, user *arn.User, content string)
|
||||||
html(lang="en")
|
html(lang="en")
|
||||||
head
|
head
|
||||||
title= app.Config.Title
|
title= app.Config.Title
|
||||||
@ -7,7 +7,7 @@ component Layout(app *aero.Application, content string)
|
|||||||
body
|
body
|
||||||
#container
|
#container
|
||||||
#header
|
#header
|
||||||
Navigation
|
Navigation(user)
|
||||||
#content-container
|
#content-container
|
||||||
main#content.fade!= content
|
main#content.fade!= content
|
||||||
|
|
||||||
|
22
main.go
22
main.go
@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/aerogo/aero"
|
"github.com/aerogo/aero"
|
||||||
"github.com/animenotifier/arn"
|
"github.com/animenotifier/arn"
|
||||||
"github.com/animenotifier/notify.moe/components"
|
"github.com/animenotifier/notify.moe/components"
|
||||||
|
"github.com/animenotifier/notify.moe/layout"
|
||||||
"github.com/animenotifier/notify.moe/pages/airing"
|
"github.com/animenotifier/notify.moe/pages/airing"
|
||||||
"github.com/animenotifier/notify.moe/pages/anime"
|
"github.com/animenotifier/notify.moe/pages/anime"
|
||||||
"github.com/animenotifier/notify.moe/pages/awards"
|
"github.com/animenotifier/notify.moe/pages/awards"
|
||||||
@ -34,9 +35,7 @@ func main() {
|
|||||||
app.Sessions.Store = arn.NewAerospikeStore("Session")
|
app.Sessions.Store = arn.NewAerospikeStore("Session")
|
||||||
|
|
||||||
// Layout
|
// Layout
|
||||||
app.Layout = func(ctx *aero.Context, content string) string {
|
app.Layout = layout.Render
|
||||||
return components.Layout(app, content)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Production or Development mode
|
// Production or Development mode
|
||||||
host, _ := os.Hostname()
|
host, _ := os.Hostname()
|
||||||
@ -64,11 +63,7 @@ func main() {
|
|||||||
|
|
||||||
// Favicon
|
// Favicon
|
||||||
app.Get("/favicon.ico", func(ctx *aero.Context) string {
|
app.Get("/favicon.ico", func(ctx *aero.Context) string {
|
||||||
if ctx.CanUseWebP() {
|
return ctx.Image("images/icons/favicon", ".png")
|
||||||
return ctx.File("images/icons/favicon.webp")
|
|
||||||
}
|
|
||||||
|
|
||||||
return ctx.File("images/icons/favicon.png")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// Scripts
|
// Scripts
|
||||||
@ -83,13 +78,12 @@ func main() {
|
|||||||
|
|
||||||
// Cover image
|
// Cover image
|
||||||
app.Get("/images/cover/:file", func(ctx *aero.Context) string {
|
app.Get("/images/cover/:file", func(ctx *aero.Context) string {
|
||||||
format := ".jpg"
|
return ctx.Image("images/cover/"+ctx.Get("file"), ".jpg")
|
||||||
|
})
|
||||||
|
|
||||||
if ctx.CanUseWebP() {
|
// Login buttons
|
||||||
format = ".webp"
|
app.Get("/images/login/:file", func(ctx *aero.Context) string {
|
||||||
}
|
return ctx.File("images/login/" + ctx.Get("file") + ".png")
|
||||||
|
|
||||||
return ctx.File("images/cover/" + ctx.Get("file") + format)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// Avatars
|
// Avatars
|
||||||
|
@ -1,14 +1,34 @@
|
|||||||
component Navigation
|
component Navigation(user *arn.User)
|
||||||
|
if user == nil
|
||||||
|
LoggedOutMenu
|
||||||
|
else
|
||||||
|
LoggedInMenu
|
||||||
|
|
||||||
|
component LoggedOutMenu
|
||||||
nav#navigation
|
nav#navigation
|
||||||
NavigationButton("Dash", "/", "inbox")
|
NavigationButton("Dash", "/", "inbox")
|
||||||
NavigationButton("Anime", "/anime", "television")
|
NavigationButton("Anime", "/anime", "television")
|
||||||
NavigationButton("Forum", "/forum", "comment")
|
NavigationButton("Forum", "/forum", "comment")
|
||||||
NavigationButton("Users", "/users", "globe")
|
NavigationButton("Users", "/users", "globe")
|
||||||
NavigationButton("Airing", "/airing", "rss")
|
NavigationButton("Airing", "/airing", "rss")
|
||||||
//- NavigationButton("Users", "/users", "globe")
|
|
||||||
|
component LoggedInMenu
|
||||||
|
nav#navigation
|
||||||
|
NavigationButton("Dash", "/", "inbox")
|
||||||
|
NavigationButton("Anime", "/anime", "television")
|
||||||
|
NavigationButton("Forum", "/forum", "comment")
|
||||||
|
NavigationButton("Users", "/users", "globe")
|
||||||
|
NavigationButton("Airing", "/airing", "rss")
|
||||||
|
NavigationButtonNoAJAX("Logout", "/logout", "sign-out")
|
||||||
|
|
||||||
component NavigationButton(name string, target string, icon string)
|
component NavigationButton(name string, target string, icon string)
|
||||||
a.navigation-link.ajax(href=target)
|
a.navigation-link.ajax(href=target)
|
||||||
|
.navigation-button
|
||||||
|
i(class="fa fa-" + icon)
|
||||||
|
span.navigation-text= name
|
||||||
|
|
||||||
|
component NavigationButtonNoAJAX(name string, target string, icon string)
|
||||||
|
a.navigation-link(href=target)
|
||||||
.navigation-button
|
.navigation-button
|
||||||
i(class="fa fa-" + icon)
|
i(class="fa fa-" + icon)
|
||||||
span.navigation-text= name
|
span.navigation-text= name
|
@ -4,6 +4,7 @@ import (
|
|||||||
"github.com/aerogo/aero"
|
"github.com/aerogo/aero"
|
||||||
"github.com/animenotifier/arn"
|
"github.com/animenotifier/arn"
|
||||||
"github.com/animenotifier/notify.moe/components"
|
"github.com/animenotifier/notify.moe/components"
|
||||||
|
"github.com/animenotifier/notify.moe/pages/frontpage"
|
||||||
"github.com/animenotifier/notify.moe/utils"
|
"github.com/animenotifier/notify.moe/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -13,21 +14,21 @@ const maxPosts = 5
|
|||||||
func Get(ctx *aero.Context) string {
|
func Get(ctx *aero.Context) string {
|
||||||
user := utils.GetUser(ctx)
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
if user != nil {
|
if user == nil {
|
||||||
posts, err := arn.GetPosts()
|
return frontpage.Get(ctx)
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return ctx.Error(500, "Error fetching posts", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
arn.SortPostsLatestFirst(posts)
|
|
||||||
|
|
||||||
if len(posts) > maxPosts {
|
|
||||||
posts = posts[:maxPosts]
|
|
||||||
}
|
|
||||||
|
|
||||||
return ctx.HTML(components.Dashboard(posts))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctx.HTML("ARN 4.0 is currently under construction.<br><a href='https://paypal.me/blitzprog' target='_blank' rel='noopener'>Support the development</a><br><a href='/auth/google'>Login via Google</a>")
|
posts, err := arn.GetPosts()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return ctx.Error(500, "Error fetching posts", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
arn.SortPostsLatestFirst(posts)
|
||||||
|
|
||||||
|
if len(posts) > maxPosts {
|
||||||
|
posts = posts[:maxPosts]
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.HTML(components.Dashboard(posts))
|
||||||
}
|
}
|
||||||
|
11
pages/frontpage/frontpage.go
Normal file
11
pages/frontpage/frontpage.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package frontpage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aerogo/aero"
|
||||||
|
"github.com/animenotifier/notify.moe/components"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Get ...
|
||||||
|
func Get(ctx *aero.Context) string {
|
||||||
|
return ctx.HTML(components.FrontPage())
|
||||||
|
}
|
8
pages/frontpage/frontpage.pixy
Normal file
8
pages/frontpage/frontpage.pixy
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
component FrontPage
|
||||||
|
p Anime Notifier 4.0 is currently under construction.
|
||||||
|
p
|
||||||
|
a(href="https://paypal.me/blitzprog", rel="noopener") Support the development
|
||||||
|
|
||||||
|
.login-buttons
|
||||||
|
a.login-button(href="/auth/google")
|
||||||
|
img.login-button-image(src="/images/login/google", alt="Google Login", title="Login with your Google account")
|
11
pages/frontpage/frontpage.scarlet
Normal file
11
pages/frontpage/frontpage.scarlet
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
.login-buttons
|
||||||
|
horizontal-wrap
|
||||||
|
width 100%
|
||||||
|
justify-content center
|
||||||
|
|
||||||
|
.login-button
|
||||||
|
//
|
||||||
|
|
||||||
|
.login-button-image
|
||||||
|
max-width 236px
|
||||||
|
max-height 44px
|
@ -10,6 +10,7 @@ func main() {
|
|||||||
|
|
||||||
arn.DB.DeleteTable("NickToUser")
|
arn.DB.DeleteTable("NickToUser")
|
||||||
arn.DB.DeleteTable("EmailToUser")
|
arn.DB.DeleteTable("EmailToUser")
|
||||||
|
arn.DB.DeleteTable("GoogleToUser")
|
||||||
|
|
||||||
// Get a stream of all anime
|
// Get a stream of all anime
|
||||||
allUsers, err := arn.AllUsers()
|
allUsers, err := arn.AllUsers()
|
||||||
@ -29,6 +30,13 @@ func main() {
|
|||||||
if user.Email != "" {
|
if user.Email != "" {
|
||||||
user.SetEmail(user.Email)
|
user.SetEmail(user.Email)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if user.Accounts.Google.ID != "" {
|
||||||
|
arn.DB.Set("GoogleToUser", user.Accounts.Google.ID, &arn.GoogleToUser{
|
||||||
|
ID: user.Accounts.Google.ID,
|
||||||
|
UserID: user.ID,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
color.Green("Finished.")
|
color.Green("Finished.")
|
||||||
|
Loading…
Reference in New Issue
Block a user