sophuwu.site > myweb   
              78
            
             package template

import (
	"html/template"
	"net/http"
	"os"
	"path/filepath"
	"sophuwu.site/myweb/config"
)

type HTMLDataMap map[string]any

func Data(title, desc string) HTMLDataMap {
	var data = make(HTMLDataMap)
	data["Title"] = title
	data["Description"] = desc
	return data
}

func (d *HTMLDataMap) Set(key string, value any) {
	(*d)[key] = value
}

func (d *HTMLDataMap) SetHTML(value string) {
	(*d)["Content"] = value
}

func (d *HTMLDataMap) SetIfEmpty(key string, value any) {
	if _, ok := (*d)[key]; !ok {
		(*d)[key] = value
	}
}

var templates *template.Template
var fillFunc func(w http.ResponseWriter, name string, data HTMLDataMap) error
var templatesDir string

func parseTemplates() error {
	index := template.New("index")
	index.Parse(filepath.Join(templatesDir, "index.html"))
	index.Option()

	tmp, err := template.ParseGlob(templatesDir)
	if err != nil {
		return err
	}
	templates = tmp
	return nil
}

func Init(path string) error {
	templatesDir = path
	if os.Getenv("DEBUG") == "1" {
		fillFunc = func(w http.ResponseWriter, name string, data HTMLDataMap) error {
			err := parseTemplates()
			if err != nil {
				return err
			}
			return templates.ExecuteTemplate(w, name, data)
		}
	} else {
		fillFunc = func(w http.ResponseWriter, name string, data HTMLDataMap) error {
			return templates.ExecuteTemplate(w, name, data)
		}
	}

	return parseTemplates()
}

func Use(w http.ResponseWriter, r *http.Request, name string, data HTMLDataMap) error {
	data.SetIfEmpty("Url", config.URL+r.URL.Path)
	data.SetIfEmpty("Email", config.Email)
	data.SetIfEmpty("Name", config.Name)
	if data["Content"] != nil {
		data["HTML"] = template.HTML(data["Content"].(string))
	}
	return fillFunc(w, name, data)
}