Files
kouiz/internal/http/handler/webui/common/component/app_page.templ
2025-06-18 19:12:16 +02:00

54 lines
1.6 KiB
Plaintext

package component
type AppPageOptions struct {
PageOptions []PageOptionFunc
}
type AppPageOptionFunc func(opts *AppPageOptions)
func WithPageOptions(funcs ...PageOptionFunc) AppPageOptionFunc {
return func(opts *AppPageOptions) {
opts.PageOptions = funcs
}
}
func NewAppPageOptions(funcs ...AppPageOptionFunc) *AppPageOptions {
opts := &AppPageOptions{
PageOptions: make([]PageOptionFunc, 0),
}
for _, fn := range funcs {
fn(opts)
}
return opts
}
templ AppPage(funcs ...AppPageOptionFunc) {
{{ opts := NewAppPageOptions(funcs...) }}
@Page(opts.PageOptions...) {
<div class="container">
<section class="section">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<figure class="image mr-3" style="width:100px">
<img class="is-rounded" src={ string(BaseURL(ctx, WithPath("/assets/panda.svg"))) }/>
</figure>
<a href={ BaseURL(ctx) }>
<h1 class="title is-size-1">Kouiz</h1>
</a>
</div>
</div>
<div class="level-right">
<div class="buttons is-right level-item">
<a class="button is-medium" href={ BaseURL(ctx, WithPath("/quiz/history")) }><span class="icon"><i class="fa fa-history"></i></span></a>
<a class="button is-medium" href={ BaseURL(ctx, WithPath("/quiz/leaderboard")) }><span class="icon"><i class="fa fa-trophy"></i></span></a>
<a class="button is-medium" href={ BaseURL(ctx, WithPath("/auth/logout")) }><span class="icon"><i class="fa fa-sign-out-alt"></i></span></a>
</div>
</div>
</div>
{ children... }
</section>
</div>
}
}