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));