SpeciesFileGroup/taxonworks

View on GitHub
app/assets/javascripts/workbench/notices.js.erb

Summary

Maintainability
Test Coverage
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();
});