From 67d65b3a8b36146c4218f64606373290a2d90147 Mon Sep 17 00:00:00 2001 From: Kailash Nadh Date: Thu, 1 Nov 2018 22:00:07 +0530 Subject: [PATCH] Add new template functions and rename Track to TrackLink --- models/models.go | 4 ++-- runner/runner.go | 48 +++++++++++++++++++++++++++++++++++++----------- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/models/models.go b/models/models.go index c7ae970..fca6a39 100644 --- a/models/models.go +++ b/models/models.go @@ -50,8 +50,8 @@ const ( // and substituting it with {{ Track "http://link.com" .Campaign.UUID .Subscriber.UUID }} // before compilation. This string gimmick is to make linking easier for users. var ( - regexpLinkTag = regexp.MustCompile(`{{(\s+)?Track\s+?"(.+?)"(\s+)?}}`) - regexpLinkTagReplace = `{{ Track "$2" .Campaign.UUID .Subscriber.UUID }}` + regexpLinkTag = regexp.MustCompile(`{{(\s+)?TrackLink\s+?"(.+?)"(\s+)?}}`) + regexpLinkTagReplace = `{{ TrackLink "$2" .Campaign.UUID .Subscriber.UUID }}` ) // Base holds common fields shared across models. diff --git a/runner/runner.go b/runner/runner.go index 1d7668b..bd9fca1 100644 --- a/runner/runner.go +++ b/runner/runner.go @@ -5,6 +5,7 @@ import ( "fmt" "html/template" "log" + "strings" "sync" "time" @@ -195,19 +196,8 @@ func (r *Runner) SpawnWorkers() { } } -// TemplateFuncs returns the template functions to be applied into -// compiled campaign templates. -func (r *Runner) TemplateFuncs(c *models.Campaign) template.FuncMap { - return template.FuncMap{ - "Track": func(url, campUUID, subUUID string) string { - return r.trackLink(url, campUUID, subUUID) - }, - } -} - // addCampaign adds a campaign to the process queue. func (r *Runner) addCampaign(c *models.Campaign) error { - // Validate messenger. if _, ok := r.messengers[c.MessengerID]; !ok { r.src.CancelCampaign(c.ID) @@ -324,3 +314,39 @@ func (r *Runner) trackLink(url, campUUID, subUUID string) string { return fmt.Sprintf(r.cfg.LinkTrackURL, uu, campUUID, subUUID) } + +// TemplateFuncs returns the template functions to be applied into +// compiled campaign templates. +func (r *Runner) TemplateFuncs(c *models.Campaign) template.FuncMap { + return template.FuncMap{ + "TrackLink": func(url, campUUID, subUUID string) string { + return r.trackLink(url, campUUID, subUUID) + }, + "FirstName": func(name string) string { + for _, s := range strings.Split(name, " ") { + if len(s) > 2 { + return s + } + } + + return name + }, + "LastName": func(name string) string { + s := strings.Split(name, " ") + for i := len(s) - 1; i >= 0; i-- { + chunk := s[i] + if len(chunk) > 2 { + return chunk + } + } + + return name + }, + "Date": func(layout string) string { + if layout == "" { + layout = time.ANSIC + } + return time.Now().Format(layout) + }, + } +}