proper-website-2/src/page.go

119 lines
2.2 KiB
Go
Raw Normal View History

2022-03-15 12:48:47 +01:00
package main
2022-06-25 11:28:37 +02:00
import (
"fmt"
"github.com/maxence-charriere/go-app/v9/pkg/app"
)
2022-03-15 12:48:47 +01:00
// Page is a generic page. By default it has a header, navbar and a default leftbar
type page struct {
app.Compo
Ititle string
/*Description
Blah blah
etc*/
2022-03-24 13:25:07 +01:00
IbackgroundClass string
Ibackground []app.UI
IleftBar []app.UI
Imain []app.UI
2022-03-15 12:48:47 +01:00
2022-06-22 12:39:36 +02:00
hideRightContent bool
2022-03-15 12:48:47 +01:00
// TODO: Possibly add "updateavailable" here, so it shows up on every page
}
func newPage() *page {
2022-06-22 12:39:36 +02:00
return &page{
hideRightContent: false,
}
2022-03-15 12:48:47 +01:00
}
2022-03-24 13:25:07 +01:00
func (p *page) Background(v ...app.UI) *page {
p.Ibackground = app.FilterUIElems(v...)
return p
}
func (p *page) BackgroundClass(t string) *page {
p.IbackgroundClass = app.AppendClass(p.IbackgroundClass, t)
return p
}
2022-03-15 12:48:47 +01:00
func (p *page) Title(t string) *page {
p.Ititle = t
return p
}
func (p *page) LeftBar(v ...app.UI) *page {
p.IleftBar = app.FilterUIElems(v...)
return p
}
func (p *page) Main(v ...app.UI) *page {
p.Imain = app.FilterUIElems(v...)
return p
}
2022-06-22 12:39:36 +02:00
func (p *page) OnMount(ctx app.Context) {
ctx.Handle("right-hide", p.hideRight)
ctx.Handle("right-show", p.showRight)
2022-06-25 11:28:37 +02:00
// Send a visit request to the spyware API to track people
ctx.Async(func() {
resp, err := client.Get("/api/visit")
if err != nil {
app.Logf("Error while creating vist request %s\n", err.Error())
}
defer resp.Body.Close()
c := resp.Cookies()
fmt.Printf("c: %v\n", c)
})
2022-06-22 12:39:36 +02:00
}
2022-03-15 12:48:47 +01:00
func (p *page) Render() app.UI {
2022-03-24 13:25:07 +01:00
if p.IbackgroundClass == "" {
p.IbackgroundClass = app.AppendClass(p.IbackgroundClass, "background")
}
2022-03-15 12:48:47 +01:00
return app.Div().
2022-03-24 14:50:36 +01:00
Class("main").
2022-03-15 12:48:47 +01:00
Body(
2022-03-24 14:50:36 +01:00
// Header and navbar
&header{},
2022-03-15 12:48:47 +01:00
app.Div().
2022-03-24 14:50:36 +01:00
Class("left").
2022-03-15 12:48:47 +01:00
Body(
2022-03-24 14:50:36 +01:00
&navbar{},
app.Range(p.IleftBar).Slice(func(i int) app.UI {
return p.IleftBar[i]
}),
),
app.Div().
2022-06-22 12:39:36 +02:00
Style("display", visible(p.hideRightContent)).
2022-03-24 14:50:36 +01:00
Class("right").
2022-06-22 12:39:36 +02:00
ID("right").
2022-03-24 14:50:36 +01:00
Body(
app.Range(p.Imain).Slice(func(i int) app.UI {
return p.Imain[i]
}),
2022-03-15 12:48:47 +01:00
),
)
}
2022-06-22 12:39:36 +02:00
func visible(v bool) string {
if v {
return "none"
}
return "block"
}
func (p *page) hideRight(ctx app.Context, a app.Action) {
p.hideRightContent = true
}
func (p *page) showRight(ctx app.Context, a app.Action) {
p.hideRightContent = false
}