message-box.js 1.32 KB
(function(window, document) {

  function MessageBox(selectors) {
    this.element = document.querySelector(selectors);
    this.message = null;

    this.element.classList.add('message-box');

    var self = this;
    var closeElement = this.element.querySelector('.close');

    if (closeElement) {
      closeElement.addEventListener('click', function (e) {
        self.hide();
      });
    }

    this.hide();
  }

  MessageBox.LEVELS = ['info', 'warning', 'success', 'default'];

  MessageBox.prototype.hide = function(message) {
    if (message !== this.message) return;

    this.message = null;
    this.element.classList.remove('active');

    MessageBox.LEVELS.forEach(function(level) {
      this.element.classList.remove(level);
    }, this);
  };

  MessageBox.prototype.show = function(level, message, time) {
    var self = this;

    level = MessageBox.LEVELS.indexOf(level) == -1 ? 'info' : level;

    this.hide();

    self.element.classList.add('active');
    self.element.classList.add(level);
    self.element.querySelector('.message').innerHTML = message;

    self.message = {
      text: message
    };

    var ref = self.message;
    if (time) {
      setTimeout(function () {
        self.hide(ref);
      }, time + 1);
    }

    return this.message;
  };

  // Expose
  window.MessageBox = MessageBox;
})(window, document);