123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package pgenr
- import (
- "bytes"
- "git.nspix.com/golang/pgenr/theme"
- "github.com/vanng822/go-premailer/premailer"
- "net/http"
- "text/template"
- )
- const (
- Name = "pgenr"
- )
- type (
- RenderOption func(o *RenderOptions)
- Template struct {
- Page *Page
- }
- RenderOptions struct {
- Theme theme.Theme
- InlineCss bool
- }
- )
- func Render(page *Page, cbs ...RenderOption) (str string, err error) {
- var (
- tpl *template.Template
- buffer bytes.Buffer
- cssProc premailer.Premailer
- )
- opts := &RenderOptions{
- Theme: &theme.Default{},
- InlineCss: true,
- }
- for _, cb := range cbs {
- cb(opts)
- }
- if tpl, err = template.New(Name).Parse(opts.Theme.Template()); err != nil {
- return
- }
- if err = tpl.Execute(&buffer, Template{page}); err != nil {
- return
- }
- if !opts.InlineCss {
- str = buffer.String()
- return
- }
- if cssProc, err = premailer.NewPremailerFromBytes(buffer.Bytes(), premailer.NewOptions()); err != nil {
- return
- }
- str, err = cssProc.Transform()
- return
- }
- func Response(page *Page, w http.ResponseWriter, cbs ...RenderOption) (err error) {
- var (
- html string
- )
- if html, err = Render(page, cbs...); err == nil {
- _, err = w.Write([]byte(html))
- }
- return
- }
|