var olay_action, olay_id, tmpVar;
//*** APPLICATION FUNCTIONS
/*---
* [fnj_selectorExist][Funzione per controllare l'esistenza di un selettore nel DOM]
* @version 1.5.0
* @param string fj_selector (ID-CLASS-DATA Selettore)
* @return boolean (TRUE/FALSE)
---*/
function fnj_selectorExist(fj_selector) {
// Controlla se il selettore è per ID
if (fj_selector.startsWith('#')) { return document.getElementById(fj_selector.substring(1)) !== null; }
// Controlla se il selettore è per Classe
if (fj_selector.startsWith('.')) { return document.getElementsByClassName(fj_selector.substring(1)).length > 0; }
// Controlla se il selettore è per attributo data-done-in
if (fj_selector.startsWith('[data-done-in')) { return document.querySelector(fj_selector) !== null; }
// Se non è un selettore valido, ritorna false
return false;
}
//$***END
/*---
* [IsJsonString][Funzione per controllare se una stringa è JSON valido]
* @version 1.5.0
* @param string f_str (Stringa da controllare)
* @return boolean (TRUE/FALSE)
---*/
function IsJsonString(f_str) {
try {
JSON.parse(f_str);
} catch (e) {
return false;
}
return true;
}
//$***END
//*** COPY/CUT/PAST
/*---
// * [copyText][Funzione di copia negli appunti]
// * @version 1.5.0
// * @param string f_targetId (ID Selettore che contiene il testo da copiare)
// * @return boolean (TRUE/FALSE)
---*/
async function copyText(f_targetId) {
const target = document.getElementById(f_targetId);
if (!target) {
console.error('Target not found');
return;
}
let text = '';
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
text = target.value;
} else {
text = target.innerText;
}
try {
await navigator.clipboard.writeText(text);
} catch (err) {
console.error('Failed to copy: ', err);
}
}
//$***END
/*---
* [cutText][Funzione di taglia negli appunti]
* @version 1.5.0
* @param string f_targetId (ID Selettore che contiene il testo da copiare)
* @return boolean (TRUE/FALSE)
---*/
async function cutText(f_targetId) {
const target = document.getElementById(f_targetId);
if (!target) {
console.error('Target not found');
return;
}
let text = '';
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
text = target.value;
target.value = '';
} else {
text = target.innerText;
target.innerText = '';
}
try {
await navigator.clipboard.writeText(text);
alert('Tagliato');
} catch (err) {
console.error('Failed to cut: ', err);
}
}
//$***END
/*---
* [pasteText][Funzione incollare dagli appunti]
* @version 1.5.0
* @param string f_targetId (ID Selettore incollare il testo)
* @return boolean (TRUE/FALSE)
---*/
async function pasteText(f_targetId) {
const target = document.getElementById(f_targetId);
if (!target) {
console.error('Target not found');
return;
}
try {
const text = await navigator.clipboard.readText();
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
target.value = text;
} else {
target.innerText = text;
}
} catch (err) {
console.error('Failed to paste: ', err);
}
}
//$***END
//*** OVERLAY PANE
//localStorage.removeItem('overlayPaneState');
// Apre il pannello OVERLAY PANE
function openOverlayPane(f_color_master) {
var container = $('#cuba_olay_pane_container');
// Apri il pannello
container.css('display', 'block').addClass('active');
// Cambia il colore di background
container.find('.cuba_olay_header')
.removeClass('bg-primary bg-info bg-warning')
.addClass(f_color_master);
}
//*** Javascript Form & Validation
//*** Validazione della mail
function validateEmail(email) {
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(String(email).toLowerCase());
}
//*** Sanitize del campo - Metodo tradizionale
function sanitizeInput(input) {
// Sanifica l'input rimuovendo potenziali script e tag HTML
const element = document.createElement('div');
element.innerText = input;
return element.innerHTML;
}
//*** Sanitize del campo - Metodo DOMPurify
function domSanitizeInput(input) {
return DOMPurify.sanitize(input);
}
//*** Visualizzazione campo password
function togglePasswordVisibility(triggerId, inputId) {
const trigger = document.getElementById(triggerId);
const passwordInput = document.getElementById(inputId);
const confirmPasswordInput = document.getElementById('confirm-password');
const icons = trigger.querySelectorAll('i');
if (passwordInput.type === 'password') {
passwordInput.type = 'text';
icons[0].classList.add('d-none');
icons[1].classList.remove('d-none');
if (confirmPasswordInput) {
confirmPasswordInput.type = 'text';
}
} else {
passwordInput.type = 'password';
icons[0].classList.remove('d-none');
icons[1].classList.add('d-none');
if (confirmPasswordInput) {
confirmPasswordInput.type = 'password';
}
}
}
//*** Controllo della consistenza password
function checkPasswordStrength() {
const passwordInput = document.getElementById('password');
const password = passwordInput.value;
const meter = document.querySelectorAll('[data-kt-password-meter-control="highlight"] > div');
const txtPassStrong = document.getElementById('txt_pass_strong');
const validChars = /^[a-zA-Z0-9&$£\-_.]*$/;
let strength = 0;
// Check for invalid characters
if (!validChars.test(password)) {
Swal.fire({
text: "La password contiene caratteri non validi. Sono ammessi solo a-z, A-Z, 0-9 e i seguenti simboli: & $ £ - _ .",
icon: "error",
buttonsStyling: !1,
confirmButtonText: "Ok, Capito!",
customClass: { confirmButton: "btn btn-primary" },
});
// Remove invalid character
passwordInput.value = password.replace(/[^a-zA-Z0-9&$£\-_.]/g, '');
return;
}
if (password.length >= 8 && password.length <= 16) strength++;
if (/[a-z]/.test(password)) strength++;
if (/[A-Z]/.test(password)) strength++;
if (/[0-9]/.test(password)) strength++;
if (/[\W_]/.test(password)) strength++;
// Set the meter only if at least 2 criteria are met
const visibleStrength = Math.max(0, strength - 1);
meter.forEach((bar, index) => {
if (index < visibleStrength) {
bar.classList.add('active');
} else {
bar.classList.remove('active');
}
});
// Update the password strength text using lang_text
let strengthText = '';
switch (visibleStrength) {
case 0:
strengthText = "Password troppo debole";
break;
case 1:
strengthText = "Password molto debole";
break;
case 2:
strengthText = "Password media";
break;
case 3:
strengthText = "Password forte";
break;
case 4:
strengthText = "Password molto forte";
break;
}
txtPassStrong.textContent = strengthText;
}
//*** Controllo delle due password
function validatePasswordsMatch() {
const password = document.getElementById('password').value;
const confirmPassword = document.getElementById('confirm-password').value;
if (password !== confirmPassword) {
document.getElementById('confirm-password').classList.add('is-invalid');
Swal.fire({
text: "Le due password non sono uguali",
icon: "error",
buttonsStyling: !1,
confirmButtonText: "Ok, Capito!",
customClass: { confirmButton: "btn btn-primary" },
});
} else {
document.getElementById('confirm-password').classList.remove('is-invalid');
}
}
$(document).ready(function() {
// Nasconde il pane fino a quando il DOM è completamente caricato OVERLAY PANE
$(window).on('load', function() {
$('#cuba_olay_pane_container').css('display', 'none');
});
// Gestisce la chiusura del pannello OVERLAY PANE
$('#cuba_olay_headerIconClose').on('click', function() {
$('#cuba_olay_pane_container').css('display', 'none').removeClass('active');
});
// Gestisce l'arrotolamento del pannello OVERLAY PANE
$('#cuba_olay_headerIconRoll').on('click', function() {
var container = $('#cuba_olay_pane_container');
var rollIcon = $('#cuba_olay_headerIconRoll');
if (container.hasClass('rolled')) {
container.removeClass('rolled');
rollIcon.removeClass('ki-eye-slash').addClass('ki-eye');
} else {
container.addClass('rolled');
rollIcon.removeClass('ki-eye').addClass('ki-eye-slash');
}
});
// Gestisce la minimizzazione del pannello OVERLAY PANE
$('#cuba_olay_headerIconPin').on('click', function() {
var container = $('#cuba_olay_pane_container');
if (container.hasClass('minimized')) {
container.removeClass('minimized');
} else {
container.addClass('minimized');
}
});
// Assegna il trigger del menu HEADER Proprietà
$('#triggerOverlayPane').on('click', function() {
openOverlayPane('bg-primary');
});
// Gestisce il caricamento dei dettagli Socio/Memebers tramite AJAX [_overlay_pane.php][router-manager-data.php]
$(document).on('click', '.overlay-pane-trigger', function() {
olay_action = $(this).data('olay-action');
olay_id = $(this).data('olay-id');
// console.log(olay_action + " ::: " + olay_id);
openOverlayPane('bg-primary');
// Dati generici aggiuntivi con valori di default
var additionalData = {
additional_param: $('#hidden_input').val() || 'default_value' // Default se l'input non esiste o è vuoto
};
// Dati dinamici
var data = {
action_105: olay_action,
id_olay: olay_id
};
// Unisci i dati dinamici con i dati aggiuntivi e serializza
var serializedData = $.param($.extend(data, additionalData));
$.ajax({
url: 'routers/router-manager-data.php',
method: 'POST',
data: serializedData,
success: function(response) {
if (response.status === 'success') {
$('#cuba_olay_pane_container .cuba_olay_body').html(response.message);
$('#cuba_olay_pane_container').css('display', 'block').addClass('active');
} else if (response.status === 'error') { // Gestione degli errori
Swal.fire({
icon: 'error',
title: 'Error',
text: response.message,
});
} else {
Swal.fire({
icon: 'error',
title: 'Error',
text: 'Formato di risposta non valido',
});
}
},
error: function(xhr, status, error) {
// Gestione degli errori di richiesta
Swal.fire({
icon: 'error',
title: 'Error',
text: 'An error occurred while processing your request.',
});
}
});
});
});