Mapeate/Public/ecma/Mapeate.Base.ecma.js

178 lines
6.3 KiB
JavaScript

Mapeate.Base = function(mapeate, entradas){
const self = this,
base_cache = {x : 0, y : 0},
posicion_de_raton = {x : 0, y : 0};
let iniciado = false,
base_hilo,
construido = false;
const constructor = () => {
mapeate.print("info", "mapeate_base_construyendose");
mapeate.print("ok", "mapeate_base_construido");
};
this.iniciar = callback => {
const terminar = estado => typeof callback == "function" && callback(estado);
if(iniciado){
terminar(false);
return false;
};
iniciado = true;
self.construir(() => {
mapeate.print("ok", "base_construida");
terminar(true);
});
return true;
};
const base_hilo_metodo = () => {
if(mapeate.si_mismo && (base_cache.x != mapeate.si_mismo.offsetWidth || base_cache.y != mapeate.si_mismo.offsetHeight) && mapeate.si_mismo.getAttribute){
const minimo = Number(mapeate.si_mismo.getAttribute("data-celdas-minimo"));
let tamano;
base_cache.x = mapeate.si_mismo.offsetWidth;
base_cache.y = mapeate.si_mismo.offsetHeight;
tamano = base_cache[base_cache.x < base_cache.y ? "x" : "y"] / Number(mapeate.si_mismo.getAttribute("data-celdas"));
mapeate.si_mismo.style.fontSize = (tamano < minimo ? tamano = minimo : tamano) + "px";
mapeate.si_mismo.setAttribute("data-menu-principal-completo", base_cache.x / tamano > 50);
};
};
this.construir = callback => {
const terminar = estado => typeof callback == "function" && callback(estado);
if(construido){
terminar(false);
return false;
};
construido = true;
const parametros = {
aplicacion : mapeate.configuracion("aplicacion"),
link : mapeate.configuracion("link"),
git : mapeate.configuracion("git"),
organizacion : mapeate.configuracion("organizacion"),
celdas : mapeate.configuracion("celdas"),
celdas_minimo : mapeate.configuracion("tamano_minimo_celda")
};
if(Mapeate.Mapas)
mapeate.vistas.establecer(mapeate.configuracion("posicion_html"), "base", {
clases : "",
link_local : "#",
logo : mapeate.configuracion("logo"),
hash : mapeate.coger_hash(),
menu_principal : mapeate.vistas.crear_elementos_de_menu("elemento_menu_principal", mapeate.configuracion("menu_principal")),
menu_links : mapeate.vistas.crear_elementos_de_menu("elemento_menu_links", mapeate.configuracion("menu_links")),
lista_mapas : mapeate.mapas.selector.crear_lista(),
parametros_raiz : {
...parametros,
onmousemove : mapeate.nombre_objeto + ".base.capturar_cursor(this, event);"
}
}, () => {
mapeate.establecer_si_mismo(document.querySelector("#" + mapeate.hash_self));
base_hilo = mapeate.anadir_hilo_de_proceso(base_hilo_metodo);
terminar(true);
});
else
mapeate.precargar(".mapeate-web", web => {
for(const clave in parametros)
web.setAttribute("data-" + clave.replace(/_/g, "_"), parametros[clave]);
mapeate.establecer_si_mismo(web);
base_hilo = mapeate.anadir_hilo_de_proceso(base_hilo_metodo);
terminar(true);
});
return true;
};
this.coger_posicion_del_cursor = evento => {
const box = mapeate.si_mismo.getBoundingClientRect();
return [evento.clientX - box.x, evento.clientY - box.y];
};
this.capturar_cursor = (elemento, evento) => [posicion_de_raton.x, posicion_de_raton.y] = self.coger_posicion_del_cursor(evento);
this.coger_posicion_del_raton = () => ({...posicion_de_raton});
this.abrir_dialogo = (mensaje, datos, acciones) => {
const dialogo = mapeate.si_mismo.querySelector(".dialogo");
let botones = ``;
dialogo.setAttribute("data-visible", true);
with(dialogo.querySelector("legend")){
setAttribute("data-i18n", mensaje);
innerText = mapeate.i18n(mensaje);
};
dialogo.querySelector("section").innerHTML = datos && typeof datos == "string" ? datos : (
`<div data-i18n="` + mensaje + `_texto"` + (
typeof datos == "object" ? ` data-1i8n-variables="` + btoa(JSON.stringify(datos)
) + `"` : ``) + `>` + mapeate.i18n(mensaje + "_texto", datos) + `</div>` + (datos ? datos.final || `` : ``)
);
if(acciones){
dialogo.setAttribute("data-solo-mensaje", false);
acciones.forEach((accion, i) => {
const texto = mapeate.i18n(accion.i18n),
hash = mapeate.hash();
botones += (`<button type="button" data-i18n="` + accion.i18n + `" data-i18n-without="true" title="` + texto + `" data-precarga="` + hash + `">
<span data-icon="` + (accion.icono || accion.i18n) + `"></span>
<span data-i18n="` + accion.i18n + `">` + texto + `</span>
</button>`);
((accion, i) => mapeate.precargar("[data-precarga=" + hash + "]", boton => {
boton.removeAttribute("data-precarga");
boton.onclick = accion.accion;
!i && boton.focus();
}))(accion, i);
});
}else
dialogo.setAttribute("data-solo-mensaje", true);
dialogo.querySelector(".grupo").innerHTML = botones;
};
this.ocultar_dialogo = (elemento, evento) => {
if(elemento && elemento.parentNode && (elemento = elemento.parentNode).classList.contains("dialogo"))
elemento.getAttribute("data-solo-mensaje") == "true" &&
elemento.getAttribute("data-visible") == "true" &&
elemento.setAttribute("data-visible", false);
else
with(mapeate.si_mismo.querySelector(".dialogo"))
getAttribute("data-visible") == "true" && setAttribute("data-visible", false);
};
constructor();
};