EmailBuilder.coffee 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. _ = require('underscore')
  2. settings = require("settings-sharelatex")
  3. marked = require('marked')
  4. PersonalEmailLayout = require("./Layouts/PersonalEmailLayout")
  5. NotificationEmailLayout = require("./Layouts/NotificationEmailLayout")
  6. BaseWithHeaderEmailLayout = require("./Layouts/" + settings.brandPrefix + "BaseWithHeaderEmailLayout")
  7. SingleCTAEmailBody = require("./Bodies/" + settings.brandPrefix + "SingleCTAEmailBody")
  8. CTAEmailTemplate = (content) ->
  9. content.greeting ?= () -> 'Hi,'
  10. content.secondaryMessage ?= () -> ""
  11. return {
  12. subject: (opts) -> content.subject(opts),
  13. layout: BaseWithHeaderEmailLayout,
  14. plainTextTemplate: (opts) -> """
  15. #{content.greeting(opts)}
  16. #{content.message(opts).trim()}
  17. #{content.ctaText(opts)}: #{content.ctaURL(opts)}
  18. #{content.secondaryMessage?(opts).trim() or ""}
  19. Regards,
  20. The #{settings.appName} Team - #{settings.siteUrl}
  21. """
  22. compiledTemplate: (opts) ->
  23. SingleCTAEmailBody({
  24. title: content.title?(opts)
  25. greeting: content.greeting(opts)
  26. message: marked(content.message(opts).trim())
  27. secondaryMessage: marked(content.secondaryMessage(opts).trim())
  28. ctaText: content.ctaText(opts)
  29. ctaURL: content.ctaURL(opts)
  30. gmailGoToAction: content.gmailGoToAction?(opts)
  31. })
  32. }
  33. templates = {}
  34. templates.registered = CTAEmailTemplate({
  35. subject: () -> "Activate your #{settings.appName} Account"
  36. message: (opts) -> """
  37. Congratulations, you've just had an account created for you on #{settings.appName} with the email address '#{opts.to}'.
  38. Click here to set your password and log in:
  39. """
  40. secondaryMessage: () -> "If you have any questions or problems, please contact #{settings.adminEmail}"
  41. ctaText: () -> "Set password"
  42. ctaURL: (opts) -> opts.setNewPasswordUrl
  43. })
  44. templates.canceledSubscription = CTAEmailTemplate({
  45. subject: () -> "#{settings.appName} thoughts"
  46. message: () -> """
  47. 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?
  48. """
  49. secondaryMessage: () -> "Thank you in advance!"
  50. ctaText: () -> "Leave Feedback"
  51. ctaURL: (opts) -> "https://sharelatex.typeform.com/to/f5lBiZ"
  52. })
  53. templates.passwordResetRequested = CTAEmailTemplate({
  54. subject: () -> "Password Reset - #{settings.appName}"
  55. title: () -> "Password Reset"
  56. message: () -> "We got a request to reset your #{settings.appName} password."
  57. secondaryMessage: () -> """
  58. If you ignore this message, your password won't be changed.
  59. If you didn't request a password reset, let us know.
  60. """
  61. ctaText: () -> "Reset password"
  62. ctaURL: (opts) -> opts.setNewPasswordUrl
  63. })
  64. templates.confirmEmail = CTAEmailTemplate({
  65. subject: () -> "Confirm Email - #{settings.appName}"
  66. title: () -> "Confirm Email"
  67. message: () -> "Please confirm your email on #{settings.appName}."
  68. ctaText: () -> "Confirm Email"
  69. ctaURL: (opts) -> opts.confirmEmailUrl
  70. })
  71. templates.projectInvite = CTAEmailTemplate({
  72. subject: (opts) -> "#{opts.project.name} - shared by #{opts.owner.email}"
  73. title: (opts) -> "#{ opts.project.name } - shared by #{ opts.owner.email }"
  74. message: (opts) -> "#{ opts.owner.email } wants to share '#{ opts.project.name }' with you."
  75. ctaText: () -> "View project"
  76. ctaURL: (opts) -> opts.inviteUrl
  77. gmailGoToAction: (opts) ->
  78. target: opts.inviteUrl
  79. name: "View project"
  80. description: "Join #{ opts.project.name } at #{ settings.appName }"
  81. })
  82. templates.verifyEmailToJoinTeam = CTAEmailTemplate({
  83. subject: (opts) -> "#{ opts.inviterName } has invited you to join a team on #{settings.appName}"
  84. title: (opts) -> "#{opts.inviterName} has invited you to join a team on #{settings.appName}"
  85. message: (opts) -> "Please click the button below to join the team and enjoy the benefits of an upgraded #{ settings.appName } account."
  86. ctaText: (opts) -> "Join now"
  87. ctaURL: (opts) -> opts.acceptInviteUrl
  88. })
  89. templates.testEmail = CTAEmailTemplate({
  90. subject: () -> "A Test Email from #{settings.appName}"
  91. title: () -> "A Test Email from #{settings.appName}"
  92. greeting: () -> "Hi,"
  93. message: () -> "This is a test Email from #{settings.appName}"
  94. ctaText: () -> "Open #{settings.appName}"
  95. ctaURL: () -> settings.siteUrl
  96. })
  97. module.exports =
  98. templates: templates
  99. CTAEmailTemplate: CTAEmailTemplate
  100. buildEmail: (templateName, opts)->
  101. template = templates[templateName]
  102. opts.siteUrl = settings.siteUrl
  103. opts.body = template.compiledTemplate(opts)
  104. if settings.email?.templates?.customFooter?
  105. opts.body += settings.email?.templates?.customFooter
  106. return {
  107. subject : template.subject(opts)
  108. html: template.layout(opts)
  109. text: template?.plainTextTemplate?(opts)
  110. }