var sActionButtons = '';
$(document).ready( () => {
$('.menu-desktop a').click(function() {
const enlace = this;
if($(enlace).data("url") != undefined && $(enlace).data("url") != ""){
const datosTracker = {};
const urlAccess = "./app/backend/ajax.php?module=horizontal_active&id=" + $(enlace).data("id");
callWebservice(urlAccess, "get", datosTracker, (response) =>{
location.href = $(enlace).data("url");
});
}else{
location.href = $(enlace).attr("href");
}
});
$('a[data-widget="pushmenu"]').click(function(){
//El + convierte el localstorage a entero, ya que solo puede almacenar cadenas
if (+getCookie("sidebar-collapse")) {
setCookie("sidebar-collapse", 0, 365);
} else {
setCookie("sidebar-collapse", 1 ,365);
}
});
});
function replaceUrlParam(url, paramName, paramValue)
{
if (paramValue == null) {
paramValue = '';
}
var pattern = new RegExp('\\b('+paramName+'=).*?(&|#|$)');
if (url.search(pattern)>=0) {
return url.replace(pattern,'$1' + paramValue + '$2');
}
url = url.replace(/[?#]$/,'');
return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue;
}
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
function getContrastYIQ(hexcolor){
hexcolor = hexcolor.replace("#", "");
var r = parseInt(hexcolor.substr(0,2),16);
var g = parseInt(hexcolor.substr(2,2),16);
var b = parseInt(hexcolor.substr(4,2),16);
var yiq = ((r*299)+(g*587)+(b*114))/1000;
return (yiq >= 128) ? 'black' : 'white';
}
const callWebservice = (url, type, datos, callBack) => {
var jqxhr = $.ajax({
url: url,
type: type,
data: datos
})
.done(function(response) {
callBack(response);
})
.fail(function(error) {
console.log( error );
})
.always(function() {
});
};
function initTable(module, aColumns, callback, baseUrl){
if(baseUrl == undefined){
baseUrl = "backend/";
}
const table = $('#tabla').DataTable({
deferRender: true,
scrollY: 'calc(100vh - 280px)',
scroller: true,
stateSave: true,
"order": [],
/*
"language": {
"url": "./resources/vendor/datatables/es_es.json"
},
*/
"ajax": {
"url": "./app/backend/ajax.php?module=" + module + "_list",
"dataSrc": ""
},
"initComplete": function(settings, json){
initTableButtons(module, baseUrl);
if(callback != undefined){
const tableTemp = settings.oInstance.api();
callback(tableTemp);
}
},
columns: aColumns
});
}
function initTableButtons(module, baseUrl){
if(baseUrl == undefined){
baseUrl = "backend/";
}
$('.action-edit').click(function(){
var id = $(this).parent().parent().find('input#id').val();
location.href= "index.php?app=" + baseUrl + module + "_edit&id=" + id;
});
$('.action-delete').click(function(){
var id = $(this).parent().parent().find('input#id').val();
Swal.fire({
title: 'Do you want to delete the element? ',
text: "The change cannot be reversed. ",
icon: 'error',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#3085d6',
confirmButtonText: 'Delete',
cancelButtonText: 'Cancel'
}).then((result) => {
if (result.isConfirmed) {
location.href= "index.php?app=" + baseUrl + module + "_delete&id=" + id;
}
});
});
/*
$('table tbody tr').click(function(e){
if($(this).find("input[type=checkbox]").is(":checked")){
$(this).find("input[type=checkbox]").attr("checked", false);
}else {
$(this).find("input[type=checkbox]").attr("checked", true);
}
e.stopPropagation();
});
*/
}
//Función generica de guardado de formulario
function initForm(urlBack){
$('.form-save').click(function(){
if(validate("datos")){
$('form#datos').submit();
}
});
$('.form-cancel').click(function(){
location.href = urlBack;
});
}
function redirect(urlBack){
location.href = urlBack;
}
function validate(form){
form = form.replace("#","");
var form = document.getElementById(form);
pristine = new Pristine(form);
var valid = pristine.validate();
return valid;
}
function initTextEditor(){
tinymce.remove();
tinymce.init({
selector:'textarea',
languaje:'es',
height: 350,
branding: false,
menubar: false,
plugins: [
"link image media filemanager responsivefilemanager"
],
toolbar1: "undo redo | bold italic underline | forecolor backcolor | link unlink | image media | code",
external_filemanager_path:"filemanager/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: {
"responsivefilemanager": "../../js/tinymce/plugins/responsivefilemanager/plugin.min.js",
"filemanager": "../../../filemanager/plugin.min.js"
},
});
}
//Definimos un obj con todos los metodos de la gestión por idiomas.
let formLanguage = {};
//Definimos las tres variables necesarias para la gestion del formulario de idiomas
formLanguage.module_get = '';
formLanguage.module_save = '';
formLanguage.module_delete = '';
formLanguage.form_name = '';
formLanguage.id = 0;
//Función que obtiene la información de la bd de contenido
formLanguage.getContent = ( language ) => {
//Mostramos la ventana de contenido, mostramos la ventana de cargando y ocultamos la ventana de información mientras cargamos.
$('#form-content-info').hide();
$('#form-content-loading').show();
$('#form-content-info div#datos').html('');
let datos = {
'id' : formLanguage.id
};
//Si pasamos un language, generamos el form añadiendo un nuevo idioma.
if(language){
datos.language = language;
}
$.ajax({
url: './app/backend/ajax.php?module=' + formLanguage.module_get,
type: "post",
data: datos ,
success: function (response) {
if( response ){
$('#form-content-info').show();
$('#form-content-loading').hide();
$('#form-content-info div#datos').html(response);
initTextEditor();
$('.form-cancel').unbind('click').bind("click", (e) =>{
redirect(url_back);
});
$('.form-save').unbind('click').bind('click', (e) =>{
if(validate(formLanguage.form_name)){
formLanguage.saveContent();
setTimeout(function(){
redirect(url_back);
}, 500);
}
});
$('.delete-language').click(function(event) {
//Obtenemos el idioma del objeto html que le hemos
const lang = $(this).attr('id').replace('-delete','');
formLanguage.deleteLanguage( lang );
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
};
//Función que guarda la información en la bd por idiomas
formLanguage.saveContent = () => {
//Actualizamos los textarea con la información de los editores.
tinymce.triggerSave();
//Serializamos el form, con el nombre que hemos definido en la clase ajax.
const postdata = $(formLanguage.form_name).serialize();
const datos = {
'id' : formLanguage.id,
postdata
};
$.ajax({
url: './app/backend/ajax.php?module=' + formLanguage.module_save,
type: "post",
data: datos ,
success: function (response) {
//Asignamos el id a la variable id creada, sólo si es insert
if( formLanguage.id == 0 ){
formLanguage.id = response;
}
console.log(formLanguage.id);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
};
//Eliminar un idioma creado
formLanguage.deleteLanguage = ( language ) => {
Swal.fire({
title: '¿Desea eliminar el idioma?',
text: "Se perderán los datos asociados a ese idioma.",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#3085d6',
confirmButtonText: 'Eliminar',
cancelButtonText: 'Cancelar'
}).then((result) => {
if (result.isConfirmed) {
formLanguage.deleteLanguageContent(language);
}
});
};
//Función que elimina la información en la bd
formLanguage.deleteLanguageContent = ( language ) => {
formLanguage.saveContent();
const datos = {
'id' : formLanguage.id,
language
};
$.ajax({
url: './app/backend/ajax.php?module=' + formLanguage.module_delete,
type: "post",
data: datos ,
success: function (response) {
formLanguage.getContent();
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
};
// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
$.fn.inputFilter = function(inputFilter) {
return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = "";
}
});
};
}(jQuery));