diff --git a/app/assets/javascripts/msip/motor.js.coffee.erb b/app/assets/javascripts/msip/motor.js.coffee.erb
index c744f7ea..ea70c8ea 100644
--- a/app/assets/javascripts/msip/motor.js.coffee.erb
+++ b/app/assets/javascripts/msip/motor.js.coffee.erb
@@ -13,918 +13,4 @@
#//= require msip/AutocompletaAjaxFamiliares
-# HTML
-
-# Remplaza las opciones de un cuadro de seleccion por unas nuevas
-# @idsel es identificación del select
-# @nuevasop Arreglo de hashes con nuevas opciones, cada una tiene propiedades
-# para la id (por omision id) y la etiqueta (por omisión nombre).
-# @usatomselect Es verdadero si y solo si el cuadro de selección usa tom-select
-# @cid campo con id en cada elemento de @nuevasop por omision id
-# @cetiqueta campo con etiqueta en cada elemento de @nuevasop por omision nombre
-# @opvacia Incluye opción vacia entre las posibles
-@msip_remplaza_opciones_select = (idsel, nuevasop, usatomselect = false, cid = 'id',
- cetiqueta = 'nombre', opvacia = false) ->
- s = $("#" + idsel)
- if (s.length != 1)
- alert('msip_remplaza_opciones_select: no se encontró ' + idsel)
- return
- sel = s.val()
- nh = ''
- if opvacia
- nh = ""
- nuevasop.forEach( (v) ->
- id = v[cid]
- nh = nh + ""
- )
- s.html(nh)
- if usatomselect
- Msip__Motor.refrescarElementoTomSelect(document.querySelector('#' + idsel))
- return
-
-# Escapa cadena por presentar para evitar HTML
-# De https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript
-@msip_escapaHtml = (cadena) ->
- cadena.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'")
-
-
-# Actualiza opciones de cuadros de selección que dependen de datos de un
-# formulario anidado
-#
-# @params idfuente id en html del formulario anidado
-# @params posfijo_id_fuente posfijo para identificaciones de campos con
-# valores para opciones
-# @params posfijo_etiqueta_fuente posfijo para identificaciones de campos
-# con etiquetas para opciones
-# @params seldestino lista de selectores que identifica cuadros de selección
-# dependientes de la fuente y que serán modificados
-@msip_actualiza_cuadros_seleccion_dependientes = (idfuente, posfijo_id_fuente, posfijo_etiqueta_fuente, seldestino, opvacia = false) ->
- nuevasop = []
- lobj = $('#' + idfuente + ' .nested-fields[style!="display: none;"]')
- lobj.each((k, v) ->
- id = $(v).find('input[id$=' + posfijo_id_fuente + ']').val()
- etiqueta = $(v).find('input[id$=' + posfijo_etiqueta_fuente + ']').val()
- nuevasop.push({id: id, etiqueta: etiqueta})
- )
- seldestino.forEach( (sel) ->
- $(sel).each((i,r) ->
- ts = $(r).hasOwnProperty('tom-select')
- msip_remplaza_opciones_select($(r).attr('id'), nuevasop, ts, 'id', 'etiqueta', opvacia)
- )
- )
- return
-
-# Actualiza opciones de cuadros de selección que dependen de datos de un
-# formulario anidado. Etiquetas de opciones se calculan con función.
-#
-# @params idfuente id en html del formulario anidado
-# @params posfijo_id_fuente posfijo para identificaciones de campos con
-# valores para opciones
-# @params fun_etiqueta función que retorna etiqueta que corresponde a una
-# opción
-# @params seldestino lista de selectores que identifica cuadros de selección
-# dependientes de la fuente y que serán modificados
-@msip_actualiza_cuadros_seleccion_dependientes_fun_etiqueta = (idfuente, posfijo_id_fuente, fun_etiqueta, seldestino, opvacia = false) ->
- nuevasop = []
- lobj = $('#' + idfuente + ' .nested-fields[style!="display: none;"]')
- lobj.each((k, v) ->
- id = $(v).find('input[id$=' + posfijo_id_fuente + ']').val()
- etiqueta = fun_etiqueta($(v))
- nuevasop.push({id: id, etiqueta: etiqueta})
- )
- seldestino.forEach( (sel) ->
- $(sel).each((i,r) ->
- ts = $(r).hasOwnProperty('tom-select')
- msip_remplaza_opciones_select($(r).attr('id'), nuevasop, ts, 'id', 'etiqueta', opvacia)
- )
- )
- return
-
-
-
-# Intenta eliminar una fila añadida con coocon
-# @fila fila por eliminar de una tabla dinámica manejada por cocoon
-# @prefijo_url Preijo del URL al cual enviar requerimientos AJAX para eliminar
-# se le concatenará la identificación i.e prefijo_url/id/ (se espera json)
-# y se le agregaría antes el punto de montaje
-# @seldep Lista de selectores a los cuadros de selección que dependen
-# de la fila por eliminar (si existen esta función no eliminará la fila
-# sino alertará).
-@msip_intenta_eliminar_fila = (fila, prefijo_url, seldep) ->
- # Evitar ejecutar 2 veces en menos de 2 segundos (suele pasar con
- # rails+turbolinks+jquery)
- t = Date.now()
- d = -1
- if (window.ajax_t)
- d = (t - window.ajax_t) / 1000
- window.ajax_t = t
- if (d == -1 || d > 2)
- # encontrar id de registro por eliminar
- bid = fila.find('input[id$=_id]')
- if (bid.length != 1)
- return false
- ide = +$(bid[0]).val()
- if (seldep != null)
- num = 0
- seldep.forEach( (sel) ->
- $(sel + ' option:selected').each(() ->
- if (+$(this).val() == ide)
- num+=1
- )
- )
- if (num>0)
- alert('Hay elementos que depende de este (' + num + '). ' +
- ' Eliminelos antes.')
- return false
- root = window
- purl = prefijo_url
- if prefijo_url.substr(0, root.puntomontaje.length) != root.puntomontaje
- purl = root.puntomontaje + prefijo_url
- $.ajax({
- url: purl + ide,
- type: 'DELETE',
- dataType: 'json',
- beforeSend: ((xhr) ->
- # Ensure CSRF-Token is sent
- xhr.setRequestHeader('X-CSRF-Token',
- $('meta[name="csrf-token"]').attr('content'))
- ),
- success: ((response) ->
- $(fila).remove()
- ),
- error: ((response) ->
- if response.status != 0 && response.responseText != ''
- alert('Error: el servicio respondio con: ' +
- response.status + '\n' + response.responseText)
- )
- })
- return true
-
-
-# JAVASCRIPT
-
-# Añade endsWith a la clase String
-# http://stackoverflow.com/questions/280634/endswith-in-javascript
-if (typeof String.prototype.endsWith != 'function')
- String.prototype.endsWith = (suffix) ->
- return this.indexOf(suffix, this.length - suffix.length) != -1
-
-
-@msip_meses = ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic']
-
-# Retorna una fecha localizada a partir de una fecha ISO
-@msip_retorna_fecha_localizada = (fecha, formato_fecha) ->
- fecha_sep = msip_partes_fecha_localizada(fecha, formato_fecha)
- mes_nom = @msip_meses[fecha_sep[1] - 1]
- pc = mes_nom.substring( 0, 1 )
- pcmayus = pc.toUpperCase()
- resto = mes_nom.substring( 1 )
- mes_nom_cap = pcmayus + resto
- return fecha_sep[2].toString() + '/' + mes_nom_cap + '/' + fecha_sep[0].toString()
-
-# Retornas partes de una fecha en un formato dado
-@msip_partes_fecha_localizada = (fecha, formato_fecha) ->
- if (formato_fecha == 'dd/M/yyyy' || formato_fecha == 'dd-M-yyyy')
- anio = +fecha.slice(7,11)
- dia = +fecha.slice(0,2)
- nmes = fecha.slice(3,6)
- if typeof nmes != 'undefined' && @msip_meses.includes(nmes.toLowerCase())
- mes = @msip_meses.indexOf(nmes.toLowerCase()) + 1
- else
- mes = 6
- else if typeof fecha == 'string'
- anio = +fecha.slice(0,4)
- mes = +fecha.slice(5,7)
- dia = +fecha.slice(8,10)
- else
- anio = 1900
- mes = 1
- dia = 1
- return [anio, mes, dia]
-
-# Verifica que una fecha sea válida
-# De: http://stackoverflow.com/questions/8098202/javascript-detecting-valid-dates
-@fecha_valida = (text) ->
- date = Date.parse(text)
- if (isNaN(date))
- return false
- comp = text.split('-')
- if (comp.length != 3)
- return false;
-
- y = parseInt(comp[0], 10)
- m = parseInt(comp[1], 10)
- d = parseInt(comp[2], 10)
- date = new Date(y, m - 1, d);
- return (date.getFullYear() == y &&
- date.getMonth() + 1 == m && date.getDate() == d);
-
-
-
-# AJAX
-
-# Llamada a API
-# (recordar en rails responder con render json: objeto, status:ok,
-# donde objeto es un objeto --no una cadena o entero)
-#
-# @root
-# @ruta ruta (sin punto de montaje)
-# @datos Datos por enviar
-# @funproc Funcion para procesar respuesta
-@msip_ajax_recibe_json = (root, ruta, datos, funproc) ->
- msip_arregla_puntomontaje(root)
- # Evitar cargar de la misma ruta 2 veces en menos de 2 segundos
- # (suele pasar con rails+turbolinks+jquery)
- t = Date.now()
- d = -1
- if (root.msip_ajax_recibe_json_t)
- if (root.msip_ajax_recibe_json_t[ruta])
- d = (t - root.msip_ajax_recibe_json_t[ruta]) / 1000
- else
- root.msip_ajax_recibe_json_t = {}
- root.msip_ajax_recibe_json_t[ruta] = t
- if (d == -1 || d > 2)
- rutac = root.puntomontaje + ruta + ".json"
- $.ajax({
- url: rutac,
- data: datos,
- dataType: 'json',
- method: 'GET'
- }).fail( (jqXHR, texto) ->
- alert('Error - ' + texto )
- ).done( (e, r) ->
- funproc(root, e)
- )
-
- return true
-
-
-# Envía con ajax a la ruta especificada junto con los datos, espera
-# respuesta html de la cual extrae una parte con selector selresp y
-# lo usa para volver a pintar el elemento con selector selelem
-@msip_envia_ajax_datos_ruta_y_pinta= (ruta, datos, selresp, selelem, metodo='GET', tipo='html', concsrf = false ) ->
- root = window
- t = Date.now()
- d = -1
- if (root.msip_envia_ajax_t)
- d = (t - root.msip_envia_ajax_t)/1000
- root.msip_envia_ajax_t = t
- if (d == -1 || d > 2)
- msip_arregla_puntomontaje(root)
- token = $('meta[name="csrf-token"]').attr('content');
- rutac = root.puntomontaje + ruta + ".js"
- $.ajax({
- url: rutac,
- data: datos,
- dataType: tipo,
- beforeSend: ((xhr) ->
- if concsrf
- xhr.setRequestHeader('X-CSRF-Token', token)
- ),
- method: metodo
- }).fail( (jqXHR, texto) ->
- alert("Error con ajax a " + rutac + ": " + texto)
- ).done( (e, r) ->
- if selresp != '' && selelem != ''
- t=$(e).find(selresp)[0]
- if (selresp == selelem)
- $(selelem).replaceWith(t)
- else
- $(selelem).html(t)
-
- return
- )
- return
-
-# Envia con AJAX datos del formulario, junto con el botón submit,
-# evitando duplicaciones y volviendo a pintar el formulario.
-# @param idf Id de formulario
-# @param listaidsrempl Lista de ids por repintar
-# @param metodo GET, POST, PUT
-# @param tipo json, script, xml o html (html puede ser interceptado
-# por redirect_to con turbolinks y presentado automáticamente en navegador)
-# @param alertaerror Presentar alerta en caso de error (true/false)
-# @param vcommit Valor para commit
-#
-@msip_enviarautomatico_formulario_y_repinta = (idf, listaidsrempl,
- metodo='GET', alertaerror=true, vcommit='Enviar') ->
- root = window
- t = Date.now()
- d = -1
- if (root.msip_enviarautomatico_t)
- d = (t - root.msip_enviarautomatico_t)/1000
- root.msip_enviarautomatico_t = t
- f = $('form[id=' + idf + ']')
- root.msip_enviarautomatico_idf = idf
- root.msip_enviarautomatico_l = listaidsrempl
- # NO se permite mas de un envio en 2 segundos
- if (f.length ==1 && (d == -1 || d > 2))
- a = f.attr('action')
- vd = f.serializeArray()
- vd.push({name: 'commit', value: vcommit})
- vd.push({name: '_msip_enviarautomatico', value: 1})
- vd.push({name: '_msip_enviarautomatico_y_repinta', value: 1})
- dat = $.param(vd)
- # En ocasiones lanza 2 veces seguidas el mismo evento.
- # Evitamos enviar lo mismo.
- if (!root.dant || root.dant != d)
- root.dant = d
- $.ajax({
- url: a,
- data: dat,
- method: metodo,
- dataType: 'html',
- beforeSend: ((xhr) ->
- # Asegurar envio de Token CSRF
- xhr.setRequestHeader('X-CSRF-Token',
- $('meta[name="csrf-token"]').attr('content'))
- ),
- error: ((response) ->
- if alertaerror && response.status != 0 && response.responseText != ''
- alert('Error: el servicio respondió: ' +
- response.status + '\n' + response.responseText)
- ),
- success: ( (e, r, j) ->
- listaidsremp = root.msip_enviarautomatico_l
- listaidsremp.forEach((idf) ->
- t = $(e).find('#' + idf)[0]
- #$('#' + idf).replaceWith(t)
- $('#' + idf).html(t.innerHTML)
- )
- return
- )
-
- })
- return
-
-
-# Envia con AJAX datos del formulario, junto con el botón submit,
-# evitando duplicaciones.
-# @param f Formulario jquery-sado
-# @param metodo GET, POST, PUT
-# @param tipo json, script, xml o html (html puede ser interceptado
-# por redirect_to con turbolinks y presentado automáticamente en navegador)
-# @param alertaerror Presentar alerta en caso de error (true/false)
-# @param vcommit Valor para commit
-#
-@msip_enviarautomatico_formulario = (f, metodo='GET', tipo='script',
- alertaerror=true, vcommit='Enviar', agenviarautom = true) ->
- root = window
- t = Date.now()
- d = -1
- if (root.msip_enviarautomatico_t)
- d = (t - root.msip_enviarautomatico_t)/1000
- root.msip_enviarautomatico_t = t
- # NO se permite mas de un envio en 2 segundos
- if (d == -1 || d > 2)
- a = f.attr('action')
- vd = f.serializeArray()
- vd.push({name: 'commit', value: vcommit})
- if agenviarautom
- vd.push({name: '_msip_enviarautomatico', value: 1})
- dat = $.param(vd)
- # En ocasiones lanza 2 veces seguidas el mismo evento.
- # Evitamos enviar lo mismo.
- if (!root.dant || root.dant != d)
- root.dant = d
- $.ajax({
- url: a,
- data: dat,
- method: metodo
- dataType: tipo
- beforeSend: ((xhr) ->
- # Asegurar envio de Token CSRF
- xhr.setRequestHeader('X-CSRF-Token',
- $('meta[name="csrf-token"]').attr('content'))
- ),
- error: ((response) ->
- if alertaerror && response.status != 0 && response.responseText != ''
- alert('Error: el servicio respondió: ' +
- response.status + '\n' + response.responseText)
- ),
- success: ((response) ->
- a = document.querySelectorAll(".tom-select")
- a.forEach( (el) ->
- if (typeof el.tomselect == 'undefined')
- new TomSelect(el, window.configuracionTomSelect)
- )
- )
- })
- return
-
-# Antes de visitar un enlace, producto de presionar un elemento ,
-# agrega al URL destino datos de formulario
-@msip_completa_enlace = (elema, idruta, rutagenera) ->
- if idruta == null
- f = $(elema).closest('form')
- else
- f = $("form[action$='" + idruta + "']")
- d = f.serialize()
- d += '&commit=Enviar'
- root = window;
- msip_arregla_puntomontaje(root)
- if (root.puntomontaje != '/' || rutagenera[0] != '/') && rutagenera.substring(0, root.puntomontaje.length) != root.puntomontaje
- rutagenera = root.puntomontaje + rutagenera
- e = rutagenera + '?' + d
- $(elema).attr('href', e)
-
-
-# Ejecuta función con respuesta que recibe mendiante AJAX
-# rutajson Ruta del API que respondera JSON (sin punto de montaje, ni .json)
-# params Parametros por pasar a consulta AJAX
-# f Función por llamar
-# descerr Descripcion por presentar en caso de que el JSON no responda
-# root Donde se almacenan objetos globales
-@msip_funcion_tras_AJAX = (rutajson, params, f, descerr, root = window) ->
- msip_arregla_puntomontaje(root)
- t = Date.now()
- d = -1
- if (root.msip_funcion_tras_AJAX_t)
- d = (t - root.msip_funcion_tras_AJAX_t)/1000
- root.msip_funcion_tras_AJAX_t = t
- # NO se permite mas de un envio en 2 segundos
- if (d > 0 && d <= 2)
- return
-
- x = $.getJSON(root.puntomontaje + rutajson + ".json", params)
- x.done((res) ->
- f(root, res)
- )
- x.fail((m1, m2, m3) ->
- alert(
- 'Problema ' + descerr + '. ' + params + ' ' + m1 + ' ' + m2 + ' ' + m3)
- )
-
-# Ejecuta función que recibe un parametro además de root y la respuesta que
-# recibe mendiante AJAX
-# rutajson Ruta del API que respondera JSON (sin punto de montaje, ni .json)
-# params Parametros por pasar a consulta AJAX
-# f Función por llamar
-# p1 Parametro por pasara a la funcion f
-# descerr Descripcion por presentar en caso de que el JSON no responda
-# root Donde se almacenan objetos globales
-@msip_funcion_1p_tras_AJAX = (rutajson, params, f, p1, descerr, root = window) ->
- msip_arregla_puntomontaje(root)
- t = Date.now()
- d = -1
- if (root.msip_funcion_1p_tras_AJAX_t)
- d = (t - root.msip_funcion_1p_tras_AJAX_t)/1000
- root.msip_funcion_1p_tras_AJAX_t = t
- # NO se permite mas de un envio en 1 segundos
- if (d > 0 && d <= 1)
- return
-
- x = $.getJSON(root.puntomontaje + rutajson + ".json", params)
- x.done((res) ->
- f(root, res, p1)
- )
- x.fail((m1, m2, m3) ->
- alert(
- 'Problema ' + descerr + '. ' + params + ' ' + m1 + ' ' + m2 + ' ' + m3)
- )
-
-
-
-# Cambia cuadro de texto con cadena que recibe mediante AJAX
-# rutajson Ruta del API que respondera JSON (sin punto de montaje), se
-# supone que respondera un objeto json de la forma {res: cadena}
-# params Parametros por pasar a consulta AJAX
-# iddest Id del campo de texto destino
-# descerr Descripcion por presentar en caso de que el JSON no responda
-# f Función por llamar despues de llenar campo
-# root Donde se almacenan objetos globales
-@msip_cambia_cuadrotexto_AJAX = (rutajson, params, iddest, descerr, f = null, root = window) ->
- msip_arregla_puntomontaje(root)
- t = Date.now()
- d = -1
- if (root.msip_cambia_cuadrotexto_AJAX_t)
- d = (t - root.msip_cambia_cuadrotexto_AJAX_t)/1000
- root.msip_cambia_cuadrotexto_AJAX_t = t
- # NO se permite mas de un envio en 2 segundos
- if (d > 0 && d <= 2)
- return
-
- x = $.getJSON(root.puntomontaje + rutajson + ".json", params)
- x.done((datos) ->
- $('#' + iddest).val(datos['res'])
- if f != null
- f(root)
- )
- x.fail((m1, m2, m3) ->
- alert(
- 'Problema ' + descerr + '. ' + params + ' ' + m1 + ' ' + m2 + ' ' + m3)
- )
-
-
-
-# Elige una opción de un campo select con base en un dato solicitado con AJAX
-# $elem Elemento jquery del campo origen
-# rutajson Ruta del API que respondera JSON (sin punto de montaje)
-# lid Arreglo de parejas [idsel, campores] donde idsel es id del campo
-# select por modificar y campores es campo por usar de la respuesta
-# JSON
-# descerr Descripcion por presentar en caso de que el JSON no responda
-# f Función por llamar despues de cambiar opción
-# root Donde se almacenan objetos globales
-@msip_elige_opcion_select_con_AJAX = ($elem, rutajson, lid, descerr, f = null, root = window) ->
- msip_arregla_puntomontaje(root)
- t = Date.now()
- d = -1
- if (root.msip_elige_opcion_select_con_AJAX_t)
- d = (t - root.msip_elige_opcion_select_con_AJAX_t)/1000
- root.msip_elige_opcion_select_con_AJAX_t = t
- # NO se permite mas de un envio en 2 segundos
- if (d > 0 && d <= 2)
- return
-
- val = $elem.val()
- x = $.getJSON(root.puntomontaje + rutajson + ".json")
- x.done((datos) ->
- lid.forEach( (p) ->
- $('#' + p[0]).val(datos[p[1]])
- )
- if f != null
- f(root)
- )
- x.fail((m1, m2, m3) ->
- alert(
- 'Problema ' + descerr + '. ' + param + ' ' + m1 + ' ' + m2 + ' ' + m3)
- )
-
-# Cambia un campo select con base en valor de otro campo
-# $elem Elemento jquery del otro campo (opciones de select dependen)
-# idsel Id. del select por modificar
-# rutajson Ruta del API que respondera JSON (sin punto de montaje)
-# nomparam Parametro para el API JSON que irá con el valor de $elem
-# descerr Descripcion por presentar en caso de que el JSON no responda
-# root Donde se almacenan objetos globales
-# paramfiltro Enviar parámetro de la forma { filtro: { nomparam: val} }
-# cid Campo en el JSON resultantes de la consulta AJAX que corresponderá
-# al id de cada elemento del campo de seleccion
-# cnombre Campo en el JSON resultante de la consula AJAX que corresponderá al
-# nombre de cada elemento del campo de seleccion (si es presenta_nombre
-# además pasará parametro presenta_nombre al hacer la consulta para
-# que el controlador responda con presenta_nombre de Msip::Modelo)
-# f Función por llamar despues de cambiar el cuadro de seleccion
-@msip_llena_select_con_AJAX = ($elem, idsel, rutajson, nomparam, descerr, root = window, paramfiltro = false, cid = 'id', cnombre = 'nombre', f = null) ->
- msip_arregla_puntomontaje(root)
- t = Date.now()
- d = -1
- if (root.msip_llena_select_con_AJAX_t)
- d = (t - root.msip_llena_select_con_AJAX_t)/1000
- root.msip_llena_select_con_AJAX_t = t
- # NO se permite mas de un envio en 2 segundos
- if (d > 0 && d <= 2)
- return
-
- val = $elem.val()
- param = {}
- param[nomparam] = val
- if cnombre == 'presenta_nombre'
- param['presenta_nombre'] = 1
- if paramfiltro
- param = {filtro: param}
- x = $.getJSON(root.puntomontaje + rutajson, param)
- x.done((datos) ->
- msip_remplaza_opciones_select(idsel, datos, true, cid, cnombre)
- if f != null
- f(root)
- )
- x.fail((m1, m2, m3) ->
- alert(
- 'Problema ' + descerr + '. ' + param + ' ' + m1 + ' ' + m2 + ' ' + m3)
- )
-
-
-# Cambia un campo select con base en valor de otro campo
-# rutajson Ruta del API que respondera JSON (sin punto de montaje)
-# params Parametros por pasar a consulta AJAX
-# idsel Id. del select por modificar
-# descerr Descripcion por presentar en caso de que el JSON no responda
-# root Donde se almacenan objetos globales
-# cid Campo en el JSON resultantes de la consulta AJAX que corresponderá
-# al id de cada elemento del campo de seleccion
-# cnombre Campo en el JSON resultante de la consula AJAX que corresponderá al
-# nombre de cada elemento del campo de seleccion (si es presenta_nombre
-# además pasará parametro presenta_nombre al hacer la consulta para
-# que el controlador responda con presenta_nombre de Msip::Modelo)
-# f Función por llamar despues de cambiar el cuadro de seleccion
-# opvacia Si es verdadero agrega opción vacía al cuadro de selección
-@msip_llena_select_con_AJAX2 = (rutajson, params, idsel, descerr, root = window, cid = 'id', cnombre = 'nombre', f = null, opvacia = false) ->
- msip_arregla_puntomontaje(root)
- t = Date.now()
- d = -1
- if (root.msip_llena_select_con_AJAX2_t)
- d = (t - root.msip_llena_select_con_AJAX2_t)/1000
- root.msip_llena_select_con_AJAX2_t = t
- rv = ""
- if root.msip_llena_select_con_AJAX2_rv
- rv = root.msip_llena_select_con_AJAX2_rv
- root.msip_llena_select_con_AJAX2_rv = rutajson
- pv = {}
- if root.msip_llena_select_con_AJAX2_pv
- pv = root.msip_llena_select_con_AJAX2_pv
- root.msip_llena_select_con_AJAX2_pv = params
-
- # NO se permite mas de un envio a la misma ruta con los mismos parámetros en menos de 2 segundos
- if (d > 0 && d <= 2 && rutajson == root.msip_llena_select_con_AJAX2_r && params == root.msip_llena_select_con_AJAX2_p)
- return
- x = $.getJSON(root.puntomontaje + rutajson, params)
- x.done((datos) ->
- ##debugger
- msip_remplaza_opciones_select(idsel, datos, true, cid, cnombre, opvacia)
- if f != null
- f(root)
- )
- x.fail((m1, m2, m3) ->
- alert(
- 'Problema ' + descerr + '. ' + params + ' ' + m1 + ' ' + m2 + ' ' + m3)
- )
-
-
-# AUTOCOMPLETACIÓN
-
-# Para autocompletación busca regitros que coincidan con lo ingresado por
-# usuario en el campo s
-#
-# @param s {object} es campo texto con foco donde se busca
-# @param sel_id {string} selector de campo donde quedará identificación
-# @param fuente {mixed} arreglo, url o función que busca y retorna
-# datos de la forma label: 'l1', value: 'v1'
-#
-# @return {void}
-@busca_gen= (s, sel_id, fuente) ->
- s.autocomplete({
- source: fuente,
- minLength: 2,
- select: ( event, ui ) ->
- if (ui.item)
- $(sel_id).val(ui.item.value) if sel_id != null
- s.val(ui.item.label)
- event.stopPropagation()
- event.preventDefault()
- })
- return
-
-
-
-# PERSONA
-
-# MSIP
-
-# Pone / al final de root.puntomontaje (que debe corresponder al
-# punto de montaje de la aplicación) o lo inicializa en / si no hay
-#
-# @param root espacio para poner variables globales
-@msip_arregla_puntomontaje = (root) ->
- root.puntomontaje = '/' if typeof root.puntomontaje == 'undefined'
- root.puntomontaje += '/' if root.puntomontaje[root.puntomontaje.length-1] != '/'
-
-# Elije ubicacionpre en autocompletación
-# Tras autocompletar disparar el evento msip:autocompletada-ubicacionpre
-@msip_autocompleta_ubicacionpre = (etiqueta, id, ubipre, root) ->
- msip_arregla_puntomontaje(root)
- #cs = id.split(";")
- #ubicacionpre_id = cs[0]
- #debugger
- ubipre.find('[id$=ubicacionpre_id]').val(id)
- ubipre.find('[id$=ubicacionpre_texto]').val(etiqueta)
- ubipre.find('[id$=ubicacionpre_mundep_texto]').val(etiqueta)
- $(document).trigger("msip:autocompletada-ubicacionpre")
- return
-
-# Busca ubicacionpre por nombre de municipio o departamento en Colombia
-# s es objeto con foco donde se busca ubicacionpre
-@msip_busca_ubicacionpre_mundep = (s) ->
- root = window
- msip_arregla_puntomontaje(root)
- cnom = s.attr('id')
- v = $("#" + cnom).data('autocompleta')
- if (v != 1 && v != "no")
- $("#" + cnom).data('autocompleta', 1)
- # Buscamos un div con clase div_ubicacionpre dentro del cual
- # están tanto el campo ubicacionpre_id como el campo
- # ubicacionpre_mundep_texto
- ubipre = s.closest('.div_ubicacionpre')
- if (typeof ubipre == 'undefined')
- alert('No se ubico .div_ubicacionpre')
- return
- if $(ubipre).find("[id$='ubicacionpre_id']").length != 1
- alert('Dentro de .div_ubicacionpre no se ubicó ubicacionpre_id')
- return
- if $(ubipre).find("[id$='ubicacionpre_mundep_texto']").length != 1
- alert('Dentro de .div_ubicacionpre no se ubicó ubicacionpre_mundep_texto')
- return
-
- $("#" + cnom).autocomplete({
- source: root.puntomontaje + "ubicacionespre_mundep.json",
- minLength: 2,
- select: ( event, ui ) ->
- if (ui.item)
- msip_autocompleta_ubicacionpre(ui.item.value, ui.item.id, ubipre, root)
- event.stopPropagation()
- event.preventDefault()
- })
- return
-
-# Busca ubicacionpre por nombre pais, nombre dep, nombre mun, nombre centropoblado
-# s es objeto con foco donde se busca ubicacionpre
-@msip_busca_ubicacionpre = (s) ->
- root = window
- msip_arregla_puntomontaje(root)
- cnom = s.attr('id')
- v = $("#" + cnom).data('autocompleta')
- if (v != 1 && v != "no")
- $("#" + cnom).data('autocompleta', 1)
- # Buscamos un div con clase div_ubicacionpre dentro del cual
- # están tanto el campo ubicacionpre_id como el campo
- # ubicacionpre_texto
- ubipre = s.closest('.div_ubicacionpre')
- if (typeof ubipre == 'undefined')
- alert('No se ubico .div_ubicacionpre')
- return
- if $(ubipre).find("[id$='ubicacionpre_id']").length != 1
- alert('Dentro de .div_ubicacionpre no se ubicó ubicacionpre_id')
- return
- if $(ubipre).find("[id$='ubicacionpre_texto']").length != 1
- alert('Dentro de .div_ubicacionpre no se ubicó ubicacionpre_texto')
- return
-
- $("#" + cnom).autocomplete({
- source: root.puntomontaje + "ubicacionespre.json",
- minLength: 2,
- select: ( event, ui ) ->
- if (ui.item)
- msip_autocompleta_ubicacionpre(ui.item.value, ui.item.id, ubipre, root)
- event.stopPropagation()
- event.preventDefault()
- })
- return
-
-## BITACORA
-
-@msip_registra_cambios_para_bitacora = (root) ->
-
- if $('input.bitacora_cambio').length > 0
- root.bitacora_estado_inicial_formulario=$('input.bitacora_cambio').closest('form').serializeArray()
-
- $(document).on('submit', 'form:has(.bitacora_cambio)', (e) ->
- root.bitacora_estado_final_formulario=$('input.bitacora_cambio').closest('form').serializeArray()
- cambio = {}
- di = {}
- root.bitacora_estado_inicial_formulario.forEach((v) ->
- di[v.name]=v.value
- )
- df = {}
- root.bitacora_estado_final_formulario.forEach((v) ->
- df[v.name]=v.value
- if typeof di[v.name] == 'undefined'
- cambio[v.name] = [null, v.value]
- )
- for i, e of di
- if typeof df[i] == 'undefined'
- cambio[i] = [e, null]
- else if df[i] != e && i.search(/\[bitacora_cambio\]/) < 0
- cambio[i] = [e, df[i]]
- $('input.bitacora_cambio').val(JSON.stringify(cambio))
- )
- return
-
-
-# LOCALE
-
-@msip_reconocer_decimal_locale_es_CO = (n) ->
- if n == ""
- return 0
- i = 0
- r = ""
- while i= '0' && n[i] <='9'
- r = r + n[i]
- i++
- return parseFloat(r)
-
-
-@msip_inicializaMotor = (conenv = true) ->
- window.puntomontaje = "<%= Rails.configuration.relative_url_root %>"
- if conenv && <%= !ENV['RAILS_RELATIVE_URL_ROOT'] || ENV['RAILS_RELATIVE_URL_ROOT'] == "" ? "false" : "true" %>
- window.puntomontaje = "<%= ENV['RAILS_RELATIVE_URL_ROOT'] %>"
- msip_arregla_puntomontaje(window)
- # Formularios con departamento/municipio sin llenar autom. coordenadas
- window.msip_sincoord = false;
- #<% puts "formato_fecha: ", Rails.configuration.x.formato_fecha %>
- #<% puts "relative_url_root: ", Rails.configuration.relative_url_root %>
- # Formato de campos de fecha
- window.formato_fecha = '<%= Rails.configuration.x.formato_fecha && Rails.configuration.x.formato_fecha.to_s != "{}" ? Rails.configuration.x.formato_fecha.to_s : "yyyy-mm-dd" %>'
- window.msip_idioma_predet = '<%= Rails.configuration.i18n.default_locale %>'
- #MsipInicializaMotorES5()
-
-
-
-
-# Prepara eventos comunes al usar msip
-# @param root espacio para poner variables globales
-@msip_prepara_eventos_comunes = (root, sincoord = false, conenv = true) ->
- if typeof(root.formato_fecha) == 'undefined'
- msip_inicializaMotor(conenv)
-
- $('[data-toggle="tooltip"]').tooltip()
- $(document).on('cocoon:after-insert', (e) ->
- $('[data-toggle="tooltip"]').tooltip()
- )
-
- # Pone colores de acuerdo al tema
- Msip__Motor.ponerTemaUsuarioAjax()
- jQuery ->
- $("a[rel~=popover], .has-popover").popover()
- $("a[rel~=tooltip], .has-tooltip").tooltip()
-
- $('#mundep').on('focusin', (e) ->
- msip_arregla_puntomontaje(root)
- busca_gen($(this), null, root.puntomontaje + "mundep.json")
- )
-
- $(document).on('click', 'a.enviarautomatico[href^="#"]', (e) ->
- msip_enviarautomatico_formulario($('form'), 'POST', 'json', false)
- return
- )
-
- $(document).on('change', 'select[data-enviarautomatico]',
- (e) ->
- msip_enviarautomatico_formulario($(e.target.form))
- )
- $(document).on('change', 'input[data-enviarautomatico]',
- (e) ->
- #debugger
- # No procesa selección de fecha, pero si cuando se teclea
- #if typeof $(e.target).attr('data-behaviour') == 'undefined' || e.bubbles
- msip_enviarautomatico_formulario($(e.target.form))
- )
-
- # Rotador: http://blog.emaillenin.com/2014/06/showing-a-spinnerloading-cursor-icon-for-rails-4-turbolink.html
- iniciaRotador = ->
- $("html").css "cursor", "progress"
- return
-
- detieneRotador = ->
- $("html").css "cursor", "auto"
- return
-
- $(document).on('turbo:click', (event) ->
- if event.target.getAttribute('href').charAt(0) == '#'
- return event.preventDefault()
- )
-
- $(document).on "page:fetch", iniciaRotador
-
- $(document).on "page:receive", detieneRotador
-
- return
-
-
-@msip_ejecutarAlCargarPagina = (root) ->
- console.log('Msip: Ejecutando al cargar pagina')
- if typeof(window.formato_fecha) == 'undefined' || window.formato_fecha == '{}'
- msip_inicializaMotor()
-
-
- $('[data-toggle="tooltip"]').tooltip()
- $(document).on('cocoon:after-insert', (e) ->
- $('[data-toggle="tooltip"]').tooltip()
- )
-
- MsipIniciar()
-
- jQuery ->
- $("a[rel~=popover], .has-popover").popover()
- $("a[rel~=tooltip], .has-tooltip").tooltip()
-
- evento = new Event('msip:cargado');
- document.dispatchEvent(evento);
-
-
-
-@msip_edadDeFechaNacFechaRef = (anionac, mesnac, dianac, anioref, mesref, diaref) ->
- if typeof anionac == 'undefined' || anionac == ''
- return -1
- if typeof anioref == 'undefined' || anioref == ''
- return -1
-
- na = anioref - anionac
-
- if typeof mesnac != 'undefined' && mesnac != '' && mesnac > 0 &&
- typeof mesref != 'undefined' && mesref!= '' && mesref > 0 &&
- mesnac >= mesref
- if mesnac > mesref || (dianac != 'undefined' && dianac != '' &&
- dianac > 0 && diaref != 'undefined' && diaref!= '' &&
- diaref > 0 && dianac > diaref)
- na--
-
- return na;
diff --git a/app/javascript/controllers/geodep_controller.js b/app/javascript/controllers/geodep_controller.js
index 8b325496..a232d629 100644
--- a/app/javascript/controllers/geodep_controller.js
+++ b/app/javascript/controllers/geodep_controller.js
@@ -35,7 +35,8 @@ export default class extends Controller {
}
cambiar_pais(e) {
- var purl = Msip__Motor.arreglarPuntoMontaje()
+ const root = window
+ var purl = Msip__Motor.arreglarPuntomontaje(root)
console.log("departamento ahora es", this.departamentoTarget.value)
let url = purl + '/admin/departamentos.json?pais_id=' + e.target.value
@@ -64,7 +65,8 @@ export default class extends Controller {
}
cambiar_departamento(e) {
- var purl = Msip__Motor.arreglarPuntoMontaje()
+ const root = window
+ var purl = Msip__Motor.arreglarPuntomontaje(root)
console.log("municipio ahora es", this.municipioTarget.value)
let url = purl + '/admin/municipios.json?departamento_id=' +
@@ -90,7 +92,8 @@ export default class extends Controller {
}
cambiar_municipio(e) {
- var purl = Msip__Motor.arreglarPuntoMontaje()
+ const root = window
+ var purl = Msip__Motor.arreglarPuntomontaje(root)
console.log("centro poblado ahora es", this.centropobladoTarget.value)
let url = purl + '/admin/centrospoblados.json?municipio_id=' +
diff --git a/app/javascript/controllers/motor.js b/app/javascript/controllers/motor.js
index 9cc4e6f3..5aa45fbf 100644
--- a/app/javascript/controllers/motor.js
+++ b/app/javascript/controllers/motor.js
@@ -29,16 +29,15 @@ export default class Msip__Motor {
static arreglarPuntomontaje(root) {
- var purl = window.puntomontaje
// Verifica si `puntomontaje` está definido; si no, lo establece como '/'
if (typeof root.puntomontaje === 'undefined') {
- purl = '/';
+ root.puntomontaje = '/';
}
// Asegura que `puntomontaje` termine en '/'
if (root.puntomontaje[root.puntomontaje.length - 1] !== '/') {
- purl += '/';
+ root.puntomontaje += '/';
}
- return purl
+ return root.puntomontaje
}
// Si el elemento es campos de selección le configura tom-select
diff --git a/test/dummy/app/javascript/application.js b/test/dummy/app/javascript/application.js
index 88224bb3..d2666fdc 100644
--- a/test/dummy/app/javascript/application.js
+++ b/test/dummy/app/javascript/application.js
@@ -67,7 +67,7 @@ document.addEventListener('turbo:load', (e) => {
console.log('Escuchador turbo:load')
- msip_ejecutarAlCargarPagina(window) // Establece root.puntomontaje
+ //msip_ejecutarAlCargarPagina(window) // Establece root.puntomontaje
Msip__Motor.ejecutarAlCargarPagina()
})