baskin / notifme-template

A Node.js library to easily handle all your notification templates.

Home Page:https://www.notif.me

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Notif.me

Template plugin for Notif.me SDK.

npm-status js-standard-style flow-typed license

Features

  • All your notifications in one place β€” Define all your email, sms, push, and webpush templates in one folder πŸ‘

  • Choose your template engine β€” facebook/react, mozilla/nunjucks, handlebars.js, mustache.js, lodash, underscore, marko, doT, swig, linkedin/dustjs, twig.js, ejs... and many more. Literally the one you want πŸ’ƒ

  • Complete control β€” No magic: you define all the behaviours you need (layouts, CSS preprocessor...) πŸš€

  • No dependencies β€” Lightning fast installation ⚑

  • Localization β€” Easily implement i18n/l10n for all your notifications 🌐

  • CSS inlining β€” Add Juice to your dependencies and the CSS in your emails will automatically be inlined πŸŽ€

  • MIT license β€” Use it like you want.

Getting Started

$ yarn add notifme-template
// Example with nunjucks template engine ($ yarn add nunjucks)
const nunjucks = require('nunjucks')
const getRenderer = require('notifme-template')

const render = getRenderer(nunjucks.renderString, './templates')

const data = {user: {firstname: 'John', email: 'john@example.com', ...}}
render('welcome', data, 'en-US').then((notification) => {
  // Send the notification on its channels
})
// ./templates/welcome.js
module.exports = () => ({
  name: 'welcome',
  title: 'Welcome {{user.firstname}}',
  version: 1,
  channels: {
    sms: {
      from: '{{smsFrom}}',
      to: '{{user.phone}}',
      text: "Hi {{user.firstname}}, we're very happy to welcome you on board!"
    },
    email: {
      from: '{{emailFrom}}',
      to: '{{user.email}}',
      subject: 'Welcome {{user.firstname}}',
      html: `{% extends "templates/_layouts/email-transactional.html" %}
        {% block content %}
          Hi {{user.firstname}},<br><br>
          We're very happy to welcome you on board.<br><br>
          See you soon!
        {% endblock %}`
    },
    push: {
      registrationToken: '{{user.pushToken}}',
      title: 'Welcome {{user.firstname}}',
      body: "Hi {{user.firstname}}, we're very happy to welcome you on board"
    }
  },
  sampleData: {
    smsFrom: 'Notifme',
    emailFrom: '"David, Notif.me team" <david@example.com>',
    user: {
      firstname: 'John',
      email: 'john@example.com',
      phone: '+15000000001',
      pushToken: 'xxxxx'
    }
  }
})

See a complete working example for more details.

How to use

Constructor options

const getRenderer = require('notifme-template')

const render = getRenderer(/* renderer, folder, options */)
Argument name Type Required Description
renderer Function true Template engine function to use. It must implement (templateName: string, data: Object) => string
folder string true The path to the folder containing all your templates.
options Object false See options definition.

This returns the render function documented below.

Template declaration

project/
β”‚
└───templates/    <= you can place this folder where you want and choose its name
    β”‚   template1.js
    β”‚
    └───template2/
        β”‚   index.js

With the structure above, you will have two templates template1 and template2. notifme-template makes a dynamic require require(`${path.resolve(folder, templateName)}`) the first time you call them.

Each template must export a function implementing: (lang: string) => TemplateType | Promise<TemplateType>. See TemplateType definition and examples for more details.

render method

render(/* templateName, data, lang */).then((notification) => {
  // Send the notification on its channels
})
Argument name Type Required Description
templateName string true The template name to use.
data Object true Data to use when rendering the notification.
lang string false User language.

This returns a Promise resolving with the rendered template.

Contributing

js-standard-style flow-typed

Contributions are very welcome!

To get started: fork this repository to your own GitHub account and then clone it to your local device.

$ git clone git@github.com:[YOUR_USERNAME]/notifme-template.git && cd notifme-template
$ yarn install

Need Help? Found a bug?

Submit an issue to the project Github if you need any help. And, of course, feel free to submit pull requests with bug fixes or changes.

About

A Node.js library to easily handle all your notification templates.

https://www.notif.me

License:MIT License


Languages

Language:JavaScript 73.3%Language:HTML 26.4%Language:SCSS 0.3%