app/assets/javascripts/workbench/notices.js.erb
var TW = TW || {};
TW.workbench = TW.workbench || {};
TW.workbench.alert = TW.workbench.alert || {};
Object.assign(TW.workbench.alert, {
audioFile: {
default: '<%= asset_path("notify.wav") %>',
error: '<%= asset_path("error.wav") %>'
},
init: function () {
document.removeEventListener('click', this.removeMessage)
document.addEventListener('click', this.removeMessage)
if(document.querySelectorAll('.alert.alert-alert').length) {
this.play('error');
} else if (document.querySelectorAll('.alert').length) {
this.play('default');
}
},
removeMessage: function (event) {
const element = event.target;
if (element && element.classList.contains('alert-close')) {
element.parentNode.remove()
}
},
createMessage: function (noticeType, message) {
const divContainer = document.createElement('div');
const divMessage = document.createElement('div');
const divClose = document.createElement('div');
divMessage.innerHTML = message
divClose.classList.add('alert-close');
divContainer.classList.add('alert');
divContainer.classList.add('alert-' + noticeType);
divContainer.appendChild(divMessage);
divContainer.appendChild(divClose);
return divContainer
},
create: function (text, type = 'notice') {
document.querySelectorAll(".alert[class*='alert-']").forEach(function (el) {
el.parentNode.removeChild(el)
});
document.querySelector("body").appendChild(this.createMessage(type, text));
this.play(type);
},
play: function (type) {
if (!document.hidden) {
const sound = new Audio(this.audioFile[type] || this.audioFile.default);
sound.play().catch((e) => { console.log(e) });
}
}
});
document.addEventListener('turbolinks:load', () => {
TW.workbench.alert.init();
});