button.js

/**
 * Create a button
 */

class Button {

  constructor(variaboard, config) {
    this.variaboard = variaboard;
    this.id = config.id;
    this.title = config.title;
    this.callback = config.callback !== undefined ? config.callback : () => {};

    this.createDOM();
    this.listen();
  }

  /**
   * Create necessary DOM elements
   */

  createDOM() {
    this.dom = {};

    // control
    this.dom.control = document.createElement('div');
    this.dom.control.classList.add(`${this.variaboard.namespace}-control`);

    // button
    this.dom.button = document.createElement('button');
    this.dom.button.classList.add(`${this.variaboard.namespace}-control-button`);
    this.dom.button.textContent = this.title;
    this.dom.control.appendChild(this.dom.button);

    // add to control to panel
    this.variaboard.dom.controls.appendChild(this.dom.control);
  }

  /**
   * Setup event listeners
   */

  listen() {
    this.dom.button.addEventListener('click', (e) => this.onButtonClick(e));
  }

  /**
   * On button click event
   *
   * @param {object} e - Event object
   */

  onButtonClick(e) {
    this.callback();
  }

}

module.exports = Button