12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package pgenr
- import (
- "bytes"
- "git.nspix.com/golang/pgenr/theme"
- "github.com/vanng822/go-premailer/premailer"
- "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
- }
|