Protocol also provides a JavaScript library to invoke and dismiss a notification bar.

Usage

Import using Webpack as an ES module:

import MzpNotification from '@mozilla-protocol/core/protocol/js/notification-bar';

Import using Webpack as CommonJS:

const MzpNotification = require('@mozilla-protocol/core/protocol/js/notification-bar');

Import as a global variable via a <script> tag:

const MzpNotification = window.MzpNotification;

You can then initialize the component using init(). For the notification to work it is required that you pass a reference to the DOM element that triggered the modal, as well as a title to display.

MzpNotification.init(origin, options);

You can also pass a range of configuration options:

MzpNotification.init(origin, {
  title: 'This is the title.',
  cta: {
    text: "And this is a CTA link.",
    url: "https://www.mozilla.org",
    attrs: {"target": "_blank", "rel": "noopener"}
  },
  className: 'mzp-t-warning',
  closeText: 'Close notification',
  hasDismiss: true,
  isSticky: true,
  onNotificationOpen: function () {
    console.log('Notification opened');
  },
  onNotificationClose: function () {
    console.log('Notification closed');
  }
});

Notification options are as follows:

  • origin [DOM Element] element that triggered the notification
  • options [Object] object of params
    • title [String] message to display in the notification. (Required)
    • cta: [Object] options for rendering an Anchor node after the title.
      • text: (Required) text content for an Anchor element
      • url: (Required) URL for the Anchor element
      • attrs: map of additional options for the Anchor element, eg: ‘target’, ‘rel’
    • className [String] optional CSS class name to apply to the notification.
    • onNotificationOpen [Function] function to fire after notification has been opened.
    • onNotificationClose [Function] function to fire after notification has been closed.
    • hasDismiss [Boolean] include or not include dismiss button.
    • closeText [String] text to use for close button a11y.
    • isSticky [Boolean] determines if notification is absolutely positioned and sticky.

Tips

  • Make sure to initialize the component after the DOM has loaded.
<p><button class="mzp-c-button mzp-js-notification-trigger" type="button">Open Notification</button></p>

<script src="../../protocol/js/notification-bar.js"></script>

<script>
    (function() {
        'use strict';
        var dismissButtons = document.querySelectorAll('.mzp-c-notification-bar-button');
        for (var i = 0; i < dismissButtons.length; i++) {
            dismissButtons[i].addEventListener('click', function(e) {
                e.currentTarget.parentNode.remove();
            }, false);
        }
        var notificationButton = document.querySelector('.mzp-js-notification-trigger');
        notificationButton.addEventListener('click', function(e) {
            e.preventDefault();
            window.MzpNotification.init(e.target, {
                title: 'This is the title.',
                cta: {
                    text: "And this is a CTA link.",
                    url: "https://www.mozilla.org",
                    attrs: {
                        "target": "_blank",
                        "rel": "noopener"
                    }
                },
                className: 'mzp-t-warning',
                closeText: 'Close notification',
                hasDismiss: true,
                isSticky: true,
                onNotificationOpen: function() {
                    console.log('Notification opened');
                },
                onNotificationClose: function() {
                    console.log('Notification closed');
                }
            });
        }, false);
    })();
</script>