@@ -12,6 +12,7 @@ import (
1212 "github.com/jmoiron/sqlx"
1313 "github.com/jmoiron/sqlx/types"
1414 "github.com/lib/pq"
15+ "github.com/preslavrachev/gomjml/mjml"
1516 null "gopkg.in/volatiletech/null.v6"
1617)
1718
@@ -29,6 +30,7 @@ const (
2930 CampaignContentTypeMarkdown = "markdown"
3031 CampaignContentTypePlain = "plain"
3132 CampaignContentTypeVisual = "visual"
33+ CampaignContentTypeMJML = "mjml"
3234)
3335
3436// Campaigns represents a slice of Campaigns.
@@ -162,19 +164,36 @@ func (c *Campaign) CompileTemplate(f template.FuncMap) error {
162164 body = r .regExp .ReplaceAllString (body , r .replace )
163165 }
164166
167+ // Parse the base template also as MJML if the campaign content type is MJML.
168+ if c .ContentType == CampaignContentTypeMJML {
169+ htmlBody , err := mjml .Render (body )
170+ if err != nil {
171+ return fmt .Errorf ("error compiling MJML: %v" , err )
172+ }
173+ body = htmlBody
174+ }
175+
165176 baseTPL , err := template .New (BaseTpl ).Funcs (f ).Parse (body )
166177 if err != nil {
167178 return fmt .Errorf ("error compiling base template: %v" , err )
168179 }
169180
170- // If the format is markdown, convert Markdown to HTML.
171- if c .ContentType == CampaignContentTypeMarkdown {
181+ // If the campaign format is markdown, convert Markdown to HTML.
182+ switch c .ContentType {
183+ case CampaignContentTypeMarkdown :
172184 var b bytes.Buffer
173185 if err := markdown .Convert ([]byte (c .Body ), & b ); err != nil {
174186 return err
175187 }
176188 body = b .String ()
177- } else {
189+
190+ case CampaignContentTypeMJML :
191+ htmlBody , err := mjml .Render (c .Body )
192+ if err != nil {
193+ return fmt .Errorf ("error compiling MJML: %v" , err )
194+ }
195+ body = htmlBody
196+ default :
178197 body = c .Body
179198 }
180199
@@ -226,6 +245,13 @@ func (c *Campaign) ConvertContent(from, to string) (string, error) {
226245 return out , err
227246 }
228247 out = b .String ()
248+ } else if from == CampaignContentTypeMJML &&
249+ (to == CampaignContentTypeHTML || to == CampaignContentTypeRichtext ) {
250+ htmlBody , err := mjml .Render (c .Body )
251+ if err != nil {
252+ return out , fmt .Errorf ("error converting MJML: %v" , err )
253+ }
254+ out = htmlBody
229255 } else {
230256 return out , errors .New ("unknown formats to convert" )
231257 }
0 commit comments