101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
	"path/filepath"
 | 
						|
	"text/template"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"git.32bit.cafe/32bitcafe/guestbook/internal/models"
 | 
						|
	"git.32bit.cafe/32bitcafe/guestbook/ui/views"
 | 
						|
	"github.com/justinas/nosurf"
 | 
						|
)
 | 
						|
 | 
						|
type templateData struct {
 | 
						|
    CurrentYear int
 | 
						|
    User models.User
 | 
						|
    Users []models.User
 | 
						|
    Guestbook models.Guestbook
 | 
						|
    Guestbooks []models.Guestbook
 | 
						|
    Comment models.GuestbookComment
 | 
						|
    Comments []models.GuestbookComment
 | 
						|
    Flash string
 | 
						|
    Form any
 | 
						|
    IsAuthenticated bool
 | 
						|
    CSRFToken string
 | 
						|
    CurrentUser *models.User
 | 
						|
}
 | 
						|
 | 
						|
func humanDate(t time.Time) string {
 | 
						|
    return t.Format("02 Jan 2006 at 15:04")
 | 
						|
}
 | 
						|
 | 
						|
var functions = template.FuncMap {
 | 
						|
    "humanDate": humanDate,
 | 
						|
    "shortIdToSlug": shortIdToSlug,
 | 
						|
    "slugToShortId": slugToShortId,
 | 
						|
}
 | 
						|
 | 
						|
func newHTMXTemplateCache() (map[string]*template.Template, error) {
 | 
						|
    cache := map[string]*template.Template{}
 | 
						|
    pages, err := filepath.Glob("./ui/html/htmx/*.part.html")
 | 
						|
    if err != nil {
 | 
						|
        return nil, err
 | 
						|
    }
 | 
						|
    for _, page := range pages {
 | 
						|
        name := filepath.Base(page)
 | 
						|
        ts, err := template.New(name).Funcs(functions).ParseFiles(page)
 | 
						|
        if err != nil {
 | 
						|
            return nil, err
 | 
						|
        }
 | 
						|
        cache[name] = ts
 | 
						|
    }
 | 
						|
    return cache, nil
 | 
						|
}
 | 
						|
 | 
						|
func newTemplateCache() (map[string]*template.Template, error) {
 | 
						|
    cache := map[string]*template.Template{}
 | 
						|
    pages, err := filepath.Glob("./ui/html/pages/*.tmpl.html")
 | 
						|
    if err != nil {
 | 
						|
        return nil, err
 | 
						|
    }
 | 
						|
    for _, page := range pages {
 | 
						|
        name := filepath.Base(page)
 | 
						|
        ts, err := template.New(name).Funcs(functions).ParseFiles("./ui/html/base.tmpl.html")
 | 
						|
        if err != nil {
 | 
						|
            return nil, err
 | 
						|
        }
 | 
						|
        ts, err = ts.ParseGlob("./ui/html/partials/*.tmpl.html")
 | 
						|
        if err != nil {
 | 
						|
            return nil, err
 | 
						|
        }
 | 
						|
        ts, err = ts.ParseFiles(page)
 | 
						|
        if err != nil {
 | 
						|
            return nil, err
 | 
						|
        }
 | 
						|
        cache[name] = ts
 | 
						|
    }
 | 
						|
    return cache, nil
 | 
						|
}
 | 
						|
 | 
						|
func (app *application) newCommonData(r *http.Request) views.CommonData {
 | 
						|
    return views.CommonData {
 | 
						|
        CurrentYear: time.Now().Year(),
 | 
						|
        Flash: app.sessionManager.PopString(r.Context(), "flash"),
 | 
						|
        IsAuthenticated: app.isAuthenticated(r),
 | 
						|
        CSRFToken: nosurf.Token(r),
 | 
						|
        CurrentUser: app.getCurrentUser(r),
 | 
						|
        IsHtmx: r.Header.Get("Hx-Request") == "true",
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
func (app *application) newTemplateData(r *http.Request) templateData {
 | 
						|
    return templateData {
 | 
						|
        CurrentYear: time.Now().Year(),
 | 
						|
        Flash: app.sessionManager.PopString(r.Context(), "flash"),
 | 
						|
        IsAuthenticated: app.isAuthenticated(r),
 | 
						|
        CSRFToken: nosurf.Token(r),
 | 
						|
        CurrentUser: app.getCurrentUser(r),
 | 
						|
    }
 | 
						|
}
 |