access-nyc-patterns
Version:
User Interface Patterns for Benefits Access
72 lines (63 loc) • 1.83 kB
JavaScript
/**
* Alert Banner module
* @module modules/alert
* @see utilities/cookie
*/
import Cookie from '../../utilities/cookie/cookie';
/**
* Displays an alert banner.
*/
export default function() {
let cookieBuilder = new Cookie();
/**
* Make an alert visible
* @param {object} alert - DOM node of the alert to display
* @param {object} siblingElem - DOM node of alert's closest sibling,
* which gets some extra padding to make room for the alert
*/
function displayAlert(alert) {
alert.classList.remove('hidden');
}
/**
* Check alert cookie
* @param {object} alert - DOM node of the alert
* @return {boolean} - Whether alert cookie is set
*/
function checkAlertCookie(alert) {
const cookieName = cookieBuilder.dataset(alert, 'cookie');
if (!cookieName)
return false;
return typeof
cookieBuilder.readCookie(cookieName, document.cookie) !== 'undefined';
}
/**
* Add alert cookie
* @param {object} alert - DOM node of the alert
*/
function addAlertCookie(alert) {
const cookieName = cookieBuilder.dataset(alert, 'cookie');
if (cookieName) {
cookieBuilder.createCookie(
cookieName,
'dismissed',
cookieBuilder.getDomain(window.location, false),
360
);
}
}
const alerts = document.querySelectorAll('.js-alert');
/* eslint curly: ["error", "multi-or-nest"]*/
if (alerts.length) {
for (let i=0; i <= alert.length; i++) {
if (!checkAlertCookie(alerts[i])) {
const alertButton = document.getElementById('alert-button');
displayAlert(alerts[i]);
alertButton.addEventListener('click', (e) => {
alerts[i].classList.add('hidden');
addAlertCookie(alerts[i]);
});
} else
alerts[i].classList.add('hidden');
}
}
}