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 }