Source: vistas/vistadialogo.js

/**
  Vista de diálogos modales de la aplicación.
  Se muestran sobre un fondo oscuro semitransparente.
**/
import { Vista } from './vista.js'

export class VistaDialogo extends Vista {
  /**
    Constructor de la clase.
    @param {Object} controlador Controlador de la vista.
    @param {Node} base Nodo al que se añadirá la vista.
  **/
  constructor (controlador, base) {
    super(controlador)
    this.base = base
    this.callback = null // Función que se llamará al cerrar el diálogo.

    this.btnCerrar = this.base.getElementsByTagName('span')[0]
    this.hTitulo = this.base.getElementsByTagName('h2')[0]
    this.pMensaje = this.base.getElementsByTagName('p')[0]
    this.btnCancelar = this.base.getElementsByTagName('button')[0]
    this.btnAceptar = this.base.getElementsByTagName('button')[1]

    // Asociamos eventos
    this.btnCerrar.onclick = this.cerrar.bind(this)
    this.btnCancelar.onclick = this.cerrar.bind(this)
    this.btnAceptar.onclick = this.aceptar.bind(this)
  }

  /**
    Abre el diálogo y establece la función de callback.
    Si de pulsa el botón Aceptar, la función de callback recibirá el valor true. Si se pulsa Cancelar, recibirá false.
    @param titulo {String} Título del diálogo.
    @param mensaje {String} Mensaje del diálogo.
    @param callback {Function} Función que se llamará al cerrar el diálogo.
  **/
  abrir (titulo, texto, callback) {
    this.hTitulo.textContent = titulo
    this.pMensaje.textContent = texto
    this.callback = callback
    this.mostrar()
  }

  /**
    Cierra el diálogo sin realizar ninguna acción.
  **/
  cerrar () {
    this.base.style.display = 'none'
  }

  /**
    Cierra el diálogo llamando a la función de callback con false.
  **/
  cancelar () {
    this.cerrar()
    this.callback(false)
  }

  /**
    Cierra el diálogo llamando a la función de callback con true.
  **/
  aceptar () {
    this.cerrar()
    this.callback(true)
  }
}