pasosdeJesus/heb412_gen

View on GitHub
app/javascript/controllers/motor.js

Summary

Maintainability
D
2 days
Test Coverage

export default class Heb412Gen__Motor {
  /* 
   * Librería de funciones comunes.
   * Aunque no es un controlador lo dejamos dentro del directorio
   * controllers para aprovechar método de msip para compartir controladores
   * Stimulus de motores.
   *
   * Como su nombre no termina en _controller no será incluido en 
   * controllers/index.js
   *
   * Desde controladores stimulus importelo con
   *
   *  import Heb412Gen__Motor from "../heb412_gen/motor"
   *
   * Use funciones por ejemplo con
   *
   *  Heb412Gen__Motor.ejecutarAlCargarPagina()
   *
   * Para poderlo usar desde Javascript global con window.Heb412Gen__Motor 
   * asegure que en app/javascript/application.js ejecuta:
   *
   * import Heb412Gen__Motor from './controllers/heb412_gen/motor.js'
   * window.Heb412Gen__Motor = Heb412Gen__Motor
   *
   */


  // Se ejecuta cada vez que se carga una página que no está en cache
  // y tipicamente después de que se ha cargado la página y los recursos.
  static ejecutarAlCargarDocumentoYRecursos() {
    console.log("* Corriendo Heb412Gen__Motor::ejecutarAlCargarDocumentoYRecursos()")
    if (window.location.href.match(/\/plantillahcm\/ */)) {
      document.addEventListener('change', event => { 
        if (event.target.id = "plantillahcm_vista") {
          Msip__Motor.enviarAjaxDatosRutaYPinta(
            'plantillahcm/pintacampos', 'vista=' + $(this).val(), 
            '#gen_divcampos', '#divcampos'
          )
        }
      })
    }

    // MENUS CONTEXTUALES
    if (document.querySelectorAll("#heb412_mcarc").length > 0) {
      document.querySelector("#heb412_mcarc").style.display = 'none';
      document.querySelector("#heb412_mcdir").style.display = 'none';
    }

    document.querySelectorAll(".heb412_archivo").forEach( (a) => {
      a.addEventListener("contextmenu", (e) => {
        let indice = 0
        if (e.target.classList.contains('heb412_archivo')) {
          indice = e.target.dataset['heb412Indice']
        } else if (e.target.parentElement.classList.contains('heb412_archivo')) {
          indice = e.target.parentElement.dataset['heb412Indice']
        }

        if (indice > 0) {
          window.heb412_mcarc_descarga = document.querySelector(
            '#heb412-enlace-' + indice
          )
        } else {
          window.heb412_mcarc_descarga = null
        }
        document.querySelector("#heb412_mcarc").style.display = "block"
        document.querySelector("#heb412_mcarc").style.left = e.pageX
        document.querySelector("#heb412_mcarc").style.top = e.pageY
        return false;
      })
    })
    if (document.querySelectorAll(".heb412_directorio").length > 0) {

      document.querySelector(".heb412_directorio").
        addEventListener("contextmenu", 
          (e) => {
            if (e.target.getAttribute('href') == null) {
              window.heb412_mcdir_enlace = e.target.parentElement
            } else {
              window.heb412_mcdir_enlace = e.target
            }
            document.querySelector("#heb412_mcdir").style.display = "block"
            document.querySelector("#heb412_mcdir").style.left = e.pageX
            document.querySelector("#heb412_mcdir").style.top = e.pageY

            document.addEventListener("click", (e) => {
              if (e.button == 0) {
                document.querySelector(".heb412_menucontextual").style.display = "none"
              }
            })
          }
        )

      document.addEventListener("mouseleave", e => {
        if (e.target.querySelectorAll(".heb412_menucontextual").length > 0) {

          // NO se requiere y al dejarlo no propaga bien cuando se elije Eliminar
          // $(".heb412_menucontextual").hide("fast");
        }
      })

      document.addEventListener("keydown", e => {
        if (e.keyCode == 27) {
          document.querySelector(".heb412_menucontextual").style.display = "none"
        }
      })

      document.addEventListener("click", e => {
        if (e.target.id == "heb412_mcarc") {
          Msip__Motor.arreglarPuntoMontaje()
          let t = Date.now()
          let d = -1
          if (window.heb412_mcarc_t) {
            d = (t - window.heb412_mcarc_t)/1000
          }
          // NO se permite mas de un envio en 2 segundos 
          if (d == -1 || d > 2) {
            window.heb412_mcarc_t = t
            switch (e.target.id) {
              case "descargar":
                window.heb412_mcarc_descarga.click()
                break
              case "renombrar":
                alert("renombrado archivo!")
                break
              case "eliminar": 
                Heb412Gen__Motor.eliminarArchivo(window.heb412_mcarc_descarga.href)
                break
              case "permisos":
                alert("estableciendo permisos!")
                break
            }
          }
          return false
        } else if (e.target.id == "heb412_mcdir") {
          let t = Date.now()
          let d = -1
          if (window.heb412_mcdir_t) {
            d = (t - window.heb412_mcdir_t)/1000
          }
          // NO se permite mas de un envio en 2 segundos 
          if (d == -1 || d > 2) {
            window.heb412_mcdir_t = t
            switch (e.target.id) {
              case "abrir":
                window.heb412_mcdir_enlace.click()
                break
              case "renombrar":
                alert("renombrado directorio!")
                break
              case "eliminar":
                Heb412Gen__Motor.eliminarDirectorio(window.heb412_mcdir_enlace.href)
                break
              case "permisos":
                alert("estableciendo permisos a directorio!")
                break
            }
          }
        }

      })
    }
    return
  }

  // Llamar cada vez que se cargue una página detectada con turbo:load
  // Tal vez en cache por lo que podría no haberse ejecutado iniciar 
  // nuevamente.
  // Podría ser llamada varias veces consecutivas por lo que debe detectarlo
  // para no ejecutar dos veces lo que no conviene.
  static ejecutarAlCargarPagina() {
    console.log("* Corriendo Heb412Gen__Motor::ejecutarAlCargarPagina()")
  }

  // Se ejecuta desde app/javascript/application.js tras importar el motor
  static iniciar() {
    console.log("* Corriendo Heb412Gen__Motor::iniciar()")
  }



  // Pone parametros de formulario en enlace para generar plantilla
  // @elema this de boton Generar
  // @idselplantilla id del campo de seleccion de plantilla
  // @idruta ruta del formulario (e.g '/casos/filtro') si se deja
  //   en blanco se usa el mas cercano a elema
  // @rutagenera ruta por cargar con id de plantilla y valores del 
  //   formulario e.g 'casos/genera/'
  static completarEnlacePlantilla(
    elema, idselplantilla, idruta, rutagenera, formatosalida = 'ods'
  ) {
    let formato = formatosalida
    let p = $(idselplantilla).val().split('.')
    let nplantilla = p[0].replace(/[^a-zA-Z0-9_]/g, "")
    if (p.length == 2) {
      if (p[1] != 'html' && p[1] != 'ods' && p[1] != 'odt' && p[1] != 'xrlat' && p[1] != 'json' && p[1] != 'csv') {
        nplantilla = ''
      } else {
        formato = p[1]
        if (formato == 'html' || formato == 'odt' || formato == 'xrlat' || formato == 'json' || formato == 'csv') {
          formatosalida = formato
        }
      }
    }
    if (nplantilla.length > 0) {
      let f = null
      if (idruta == null) {
        f = $(elema).closest('form')
      } else {
        f = $("form[action$='" + idruta + "']")
      }
      let d = f.serialize()
      d += '&idplantilla=' +  nplantilla
      d += '&formato=' +  formato
      d += '&formatosalida=' +  formatosalida
      d += '&commit=Enviar'
      Msip__Motor.arreglarPuntoMontaje()
      if ((window.puntoMontaje != '/' || rutagenera[0] != '/') && 
        rutagenera.substring(0, window.puntoMontaje.length) != window.puntoMontaje
      ) {
        rutagenera = window.puntoMontaje + rutagenera
      }
      let e = rutagenera + '.' + formatosalida + '?' + d
      $(elema).attr('href', e)
    } else  {
      return false
    }
  }

  static eliminarArchivo(urlelim) {
    let el = document.createElement('a');
    el.href = urlelim
    let rnarc = el.pathname.replace(/^.*\/sis\/ */, '') + '/' + el.search.substr(10)
    let ub = rnarc.lastIndexOf('/')
    if (ub < 0) {
      return false
    }
    let rarc = rnarc.substr(0, ub)
    let narc = rnarc.substr(ub+1)
    Msip__Motor.enviarAjaxDatosRutaYPinta(
      'sis/eliminararc', {ruta: rarc, arc: narc}, '', '', 'POST', 
      'script', true
    )
  }

  static eliminarDirectorio(urlelim) {
    let el = document.createElement('a');
    el.href = urlelim
    let rnarc = el.pathname.replace(/^.*\/sis\/ */, '') 
    let ub = rnarc.lastIndexOf('/')
    if (ub < 0) {
      return false
    }
    let rarc = rnarc.substr(0, ub)
    let ndir = rnarc.substr(ub+1)
    Msip__Motor.enviarAjaxDatosRutaYPinta(
      'sis/eliminardir', {ruta: rarc, dir: ndir}, '', '', 'POST', 
      'script', true
    )
  }


}