gitlab-org--gitlab-foss/app/assets/javascripts/flash.js

74 lines
1.6 KiB
JavaScript
Raw Normal View History

import _ from 'underscore';
2016-07-24 20:45:11 +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
flashEl.addEventListener('transitionend', () => {
flashEl.remove();
}, {
once: true,
});
};
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
const createFlashEl = (message, type) => `
<div
class="flash-${type}"
>
<div
class="flash-text"
>
${_.escape(message)}
</div>
</div>
`;
2017-10-03 14:01:02 +00:00
const createFlash = function createFlash(message, type = 'alert', parent = document, actionConfig = null) {
const flashContainer = parent.querySelector('.flash-container');
2017-10-03 14:01:02 +00:00
if (!flashContainer) return null;
flashContainer.innerHTML = createFlashEl(message, type);
const flashEl = flashContainer.querySelector(`.flash-${type}`);
flashEl.addEventListener('click', () => hideFlash(flashEl));
2017-05-25 08:48:10 +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
}
}
2016-07-24 20:45:11 +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,
createFlashEl,
hideFlash,
};
2017-10-03 14:01:02 +00:00
window.Flash = createFlash;