2017-10-02 12:32:53 +00:00
|
|
|
import _ from 'underscore';
|
2016-07-24 20:45:11 +00:00
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
const hideFlash = (flashEl) => {
|
2017-10-03 14:01:02 +00:00
|
|
|
Object.assign(flashEl.style, {
|
|
|
|
transition: 'opacity .3s',
|
|
|
|
opacity: '0',
|
|
|
|
});
|
2016-07-24 20:45:11 +00:00
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
flashEl.addEventListener('transitionend', () => {
|
|
|
|
flashEl.remove();
|
|
|
|
}, {
|
|
|
|
once: true,
|
|
|
|
});
|
|
|
|
};
|
2017-03-11 07:30:44 +00:00
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
const createAction = config => `
|
|
|
|
<a
|
|
|
|
href="${config.href || '#'}"
|
|
|
|
class="flash-action"
|
|
|
|
${config.href ? 'role="button"' : ''}
|
|
|
|
>
|
|
|
|
${_.escape(config.title)}
|
|
|
|
</a>
|
|
|
|
`;
|
2017-05-25 08:48:10 +00:00
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
const createFlashEl = (message, type) => `
|
|
|
|
<div
|
|
|
|
class="flash-${type}"
|
|
|
|
>
|
|
|
|
<div
|
|
|
|
class="flash-text"
|
|
|
|
>
|
|
|
|
${_.escape(message)}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
`;
|
2017-05-31 14:55:57 +00:00
|
|
|
|
2017-10-03 14:01:02 +00:00
|
|
|
const createFlash = function createFlash(message, type = 'alert', parent = document, actionConfig = null) {
|
2017-10-02 12:32:53 +00:00
|
|
|
const flashContainer = parent.querySelector('.flash-container');
|
2017-10-03 14:01:02 +00:00
|
|
|
|
|
|
|
if (!flashContainer) return null;
|
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
flashContainer.innerHTML = createFlashEl(message, type);
|
2017-05-31 14:55:57 +00:00
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
const flashEl = flashContainer.querySelector(`.flash-${type}`);
|
|
|
|
flashEl.addEventListener('click', () => hideFlash(flashEl));
|
2017-05-25 08:48:10 +00:00
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
if (actionConfig) {
|
|
|
|
flashEl.innerHTML += createAction(actionConfig);
|
|
|
|
|
|
|
|
if (actionConfig.clickHandler) {
|
|
|
|
flashEl.querySelector('.flash-action').addEventListener('click', e => actionConfig.clickHandler(e));
|
2016-07-24 20:45:11 +00:00
|
|
|
}
|
2017-03-11 07:30:44 +00:00
|
|
|
}
|
2016-07-24 20:45:11 +00:00
|
|
|
|
2017-10-02 12:32:53 +00:00
|
|
|
if (flashContainer.parentNode.classList.contains('content-wrapper')) {
|
|
|
|
const flashText = flashEl.querySelector('.flash-text');
|
|
|
|
|
|
|
|
flashText.classList.add('container-fluid');
|
|
|
|
flashText.classList.add('container-limited');
|
|
|
|
}
|
|
|
|
|
|
|
|
flashContainer.style.display = 'block';
|
|
|
|
|
|
|
|
return flashContainer;
|
|
|
|
};
|
|
|
|
|
|
|
|
export {
|
2017-10-03 14:01:02 +00:00
|
|
|
createFlash as default,
|
2017-10-02 12:32:53 +00:00
|
|
|
createFlashEl,
|
|
|
|
hideFlash,
|
|
|
|
};
|
2017-10-03 14:01:02 +00:00
|
|
|
window.Flash = createFlash;
|