diff --git a/services/web/app/coffee/Features/Email/Bodies/SingleCTAEmailBody.coffee b/services/web/app/coffee/Features/Email/Bodies/SingleCTAEmailBody.coffee index cf4adf8cd7..bffa485f07 100644 --- a/services/web/app/coffee/Features/Email/Bodies/SingleCTAEmailBody.coffee +++ b/services/web/app/coffee/Features/Email/Bodies/SingleCTAEmailBody.coffee @@ -4,13 +4,17 @@ settings = require "settings-sharelatex" module.exports = _.template """
-

- <%= title %> -

+ <% if (title) { %> +

+ <%= title %> +

+ <% } %>
 
-

- <%= greeting %> -

+ <% if (greeting) { %> +

+ <%= greeting %> +

+ <% } %>

<%= message %>

diff --git a/services/web/app/coffee/Features/Email/Bodies/ol-SingleCTAEmailBody.coffee b/services/web/app/coffee/Features/Email/Bodies/ol-SingleCTAEmailBody.coffee index 45bc00383c..ee9907c019 100644 --- a/services/web/app/coffee/Features/Email/Bodies/ol-SingleCTAEmailBody.coffee +++ b/services/web/app/coffee/Features/Email/Bodies/ol-SingleCTAEmailBody.coffee @@ -4,13 +4,17 @@ settings = require "settings-sharelatex" module.exports = _.template """
-

- <%= title %> -

+ <% if (title) { %> +

+ <%= title %> +

+ <% } %>
 
-

- <%= greeting %> -

+ <% if (greeting) { %> +

+ <%= greeting %> +

+ <% } %>

<%= message %>

diff --git a/services/web/app/coffee/Features/Email/EmailBuilder.coffee b/services/web/app/coffee/Features/Email/EmailBuilder.coffee index 8952e7b864..a33f02e695 100644 --- a/services/web/app/coffee/Features/Email/EmailBuilder.coffee +++ b/services/web/app/coffee/Features/Email/EmailBuilder.coffee @@ -1,5 +1,6 @@ _ = require('underscore') settings = require("settings-sharelatex") +marked = require('marked') PersonalEmailLayout = require("./Layouts/PersonalEmailLayout") NotificationEmailLayout = require("./Layouts/NotificationEmailLayout") @@ -7,169 +8,113 @@ BaseWithHeaderEmailLayout = require("./Layouts/" + settings.brandPrefix + "BaseW SingleCTAEmailBody = require("./Bodies/" + settings.brandPrefix + "SingleCTAEmailBody") +CTAEmailTemplate = (content) -> + content.greeting ?= () -> 'Hi,' + content.secondaryMessage ?= () -> "" + return { + subject: (opts) -> content.subject(opts), + layout: BaseWithHeaderEmailLayout, + plainTextTemplate: (opts) -> """ +#{content.greeting(opts)} + +#{content.message(opts).trim()} + +#{content.ctaText(opts)}: #{content.ctaURL(opts)} + +#{content.secondaryMessage?(opts).trim() or ""} + +Regards, +The #{settings.appName} Team - #{settings.siteUrl} + """ + compiledTemplate: (opts) -> + SingleCTAEmailBody({ + title: content.title?(opts) + greeting: content.greeting(opts) + message: marked(content.message(opts).trim()) + secondaryMessage: marked(content.secondaryMessage(opts).trim()) + ctaText: content.ctaText(opts) + ctaURL: content.ctaURL(opts) + gmailGoToAction: content.gmailGoToAction?(opts) + }) + } + templates = {} -templates.registered = - subject: _.template "Activate your #{settings.appName} Account" - layout: PersonalEmailLayout - type: "notification" - plainTextTemplate: _.template """ -Congratulations, you've just had an account created for you on #{settings.appName} with the email address "<%= to %>". +templates.registered = CTAEmailTemplate({ + subject: () -> "Activate your #{settings.appName} Account" + message: (opts) -> """ +Congratulations, you've just had an account created for you on #{settings.appName} with the email address '#{opts.to}'. -Click here to set your password and log in: <%= setNewPasswordUrl %> - -If you have any questions or problems, please contact #{settings.adminEmail} +Click here to set your password and log in: """ - compiledTemplate: _.template """ -

Congratulations, you've just had an account created for you on #{settings.appName} with the email address "<%= to %>".

+ secondaryMessage: () -> "If you have any questions or problems, please contact #{settings.adminEmail}" + ctaText: () -> "Set password" + ctaURL: (opts) -> opts.setNewPasswordUrl +}) -

Click here to set your password and log in.

- -

If you have any questions or problems, please contact #{settings.adminEmail}.

+templates.canceledSubscription = CTAEmailTemplate({ + subject: () -> "#{settings.appName} thoughts" + message: () -> """ +I'm sorry to see you cancelled your #{settings.appName} premium account. Would you mind giving us some feedback on what the site is lacking at the moment via this quick survey? """ + secondaryMessage: () -> "Thank you in advance!" + ctaText: () -> "Leave Feedback" + ctaURL: (opts) -> "https://sharelatex.typeform.com/to/f5lBiZ" +}) - -templates.canceledSubscription = - subject: _.template "ShareLaTeX thoughts" - layout: PersonalEmailLayout - type:"lifecycle" - plainTextTemplate: _.template """ -Hi <%= first_name %>, - -I'm sorry to see you cancelled your ShareLaTeX premium account. Would you mind giving me some advice on what the site is lacking at the moment via this survey?: - -https://sharelatex.typeform.com/to/f5lBiZ - -Thank you in advance. - -Henry - -ShareLaTeX Co-founder -""" - compiledTemplate: _.template ''' -

Hi <%= first_name %>,

- -

I'm sorry to see you cancelled your ShareLaTeX premium account. Would you mind giving me some advice on what the site is lacking at the moment via this survey?

- -

Thank you in advance.

- -

-Henry
-ShareLaTeX Co-founder -

-''' - - -templates.passwordResetRequested = - subject: _.template "Password Reset - #{settings.appName}" - layout: BaseWithHeaderEmailLayout - type:"notification" - plainTextTemplate: _.template """ -Password Reset - -We got a request to reset your #{settings.appName} password. - -Click this link to reset your password: <%= setNewPasswordUrl %> - +templates.passwordResetRequested = CTAEmailTemplate({ + subject: () -> "Password Reset - #{settings.appName}" + title: () -> "Password Reset" + message: () -> "We got a request to reset your #{settings.appName} password." + secondaryMessage: () -> """ If you ignore this message, your password won't be changed. If you didn't request a password reset, let us know. - -Thank you - -#{settings.appName} - <%= siteUrl %> """ - compiledTemplate: (opts) -> - SingleCTAEmailBody({ - title: "Password Reset" - greeting: "Hi," - message: "We got a request to reset your #{settings.appName} password." - secondaryMessage: "If you ignore this message, your password won't be changed.
If you didn't request a password reset, let us know." - ctaText: "Reset password" - ctaURL: opts.setNewPasswordUrl - gmailGoToAction: null - }) + ctaText: () -> "Reset password" + ctaURL: (opts) -> opts.setNewPasswordUrl +}) +templates.confirmEmail = CTAEmailTemplate({ + subject: () -> "Confirm Email - #{settings.appName}" + title: () -> "Confirm Email" + message: () -> "Please confirm your email on #{settings.appName}." + ctaText: () -> "Confirm Email" + ctaURL: (opts) -> opts.confirmEmailUrl +}) -templates.projectInvite = - subject: _.template "<%= project.name %> - shared by <%= owner.email %>" - layout: BaseWithHeaderEmailLayout - type:"notification" - plainTextTemplate: _.template """ -Hi, <%= owner.email %> wants to share '<%= project.name %>' with you. +templates.projectInvite = CTAEmailTemplate({ + subject: (opts) -> "#{opts.project.name} - shared by #{opts.owner.email}" + title: (opts) -> "#{ opts.project.name } - shared by #{ opts.owner.email }" + message: (opts) -> "#{ opts.owner.email } wants to share '#{ opts.project.name }' with you." + ctaText: () -> "View project" + ctaURL: (opts) -> opts.inviteUrl + gmailGoToAction: (opts) -> + target: opts.inviteUrl + name: "View project" + description: "Join #{ opts.project.name } at #{ settings.appName }" +}) -Follow this link to view the project: <%= inviteUrl %> - -Thank you - -#{settings.appName} - <%= siteUrl %> -""" - compiledTemplate: (opts) -> - SingleCTAEmailBody({ - title: "#{ opts.project.name } – shared by #{ opts.owner.email }" - greeting: "Hi," - message: "#{ opts.owner.email } wants to share “#{ opts.project.name }” with you." - secondaryMessage: null - ctaText: "View project" - ctaURL: opts.inviteUrl - gmailGoToAction: - target: opts.inviteUrl - name: "View project" - description: "Join #{ opts.project.name } at ShareLaTeX" - }) - - -templates.verifyEmailToJoinTeam = - subject: _.template "<%= inviterName %> has invited you to join a team on #{settings.appName}" - layout: BaseWithHeaderEmailLayout - type:"notification" - plainTextTemplate: _.template """ - -Please click the button below to join the team and enjoy the benefits of an upgraded <%= appName %> account. - -<%= acceptInviteUrl %> - -Thank You - -#{settings.appName} - <%= siteUrl %> -""" - compiledTemplate: (opts) -> - SingleCTAEmailBody({ - title: "#{opts.inviterName} has invited you to join a team on #{settings.appName}" - greeting: "Hi," - message: "Please click the button below to join the team and enjoy the benefits of an upgraded #{ opts.appName } account." - secondaryMessage: null - ctaText: "Verify now" - ctaURL: opts.acceptInviteUrl - gmailGoToAction: null - }) - -templates.testEmail = - subject: _.template "A Test Email from ShareLaTeX" - layout: BaseWithHeaderEmailLayout - type:"notification" - plainTextTemplate: _.template """ -Hi, - -This is a test email sent from ShareLaTeX. - -#{settings.appName} - <%= siteUrl %> -""" - compiledTemplate: (opts) -> - SingleCTAEmailBody({ - title: "A Test Email from ShareLaTeX" - greeting: "Hi," - message: "This is a test email sent from ShareLaTeX" - secondaryMessage: null - ctaText: "Open ShareLaTeX" - ctaURL: "/" - gmailGoToAction: null - }) +templates.verifyEmailToJoinTeam = CTAEmailTemplate({ + subject: (opts) -> "#{ opts.inviterName } has invited you to join a team on #{settings.appName}" + title: (opts) -> "#{opts.inviterName} has invited you to join a team on #{settings.appName}" + message: (opts) -> "Please click the button below to join the team and enjoy the benefits of an upgraded #{ settings.appName } account." + ctaText: (opts) -> "Join now" + ctaURL: (opts) -> opts.acceptInviteUrl +}) +templates.testEmail = CTAEmailTemplate({ + subject: () -> "A Test Email from #{settings.appName}" + title: () -> "A Test Email from #{settings.appName}" + greeting: () -> "Hi," + message: () -> "This is a test Email from #{settings.appName}" + ctaText: () -> "Open #{settings.appName}" + ctaURL: () -> settings.siteUrl +}) module.exports = templates: templates - + CTAEmailTemplate: CTAEmailTemplate buildEmail: (templateName, opts)-> template = templates[templateName] opts.siteUrl = settings.siteUrl @@ -180,5 +125,4 @@ module.exports = subject : template.subject(opts) html: template.layout(opts) text: template?.plainTextTemplate?(opts) - type:template.type }