Ho scritto uno script per il gesto di scorrimento (swipe) per far apparire la barra laterale scorrendo da sinistra a destra, e lo stesso vale per la chat, per far apparire l’elenco quando ci si trova in una conversazione. L’obiettivo è migliorare l’esperienza utente. È necessario copiare lo script in un componente assegnato al tuo tema in common\head. Successivamente, credo che ci siano ancora possibilità di migliorarlo
<script>
(function() {
if (window.innerWidth > 768) return;
let startX = 0;
let startY = 0;
// Uso di 'window' per essere sicuri di catturare il gesto prima della chat
window.addEventListener("touchstart", function(e) {
if (e.touches.length === 1) {
startX = e.touches[0].clientX;
startY = e.touches[0].clientY;
}
}, { passive: true, capture: true });
window.addEventListener("touchend", function(e) {
if (!startX) return;
const touch = e.changedTouches[0];
const deltaX = touch.clientX - startX;
const deltaY = touch.clientY - startY;
if (startX >= 10 && startX <= 120 && deltaX > 50 && Math.abs(deltaY) < 50) {
// 1. SIAMO IN UN CANALE DI CHAT?
// Verifichiamo se l'URL contiene le parole chiave tipiche di un canale di chat Discourse
const currentUrl = window.location.pathname;
const isInChatChannel = currentUrl.includes('/chat/c/') || currentUrl.includes('/chat/channel/');
if (isInChatChannel) {
// Proviamo prima a cliccare sul link di ritorno se è standardizzato
const chatBackBtn = document.querySelector('.chat-channel-header a, a[href="/chat"]');
if (chatBackBtn) {
chatBackBtn.click();
} else {
// Metodo infallibile: chiediamo al browser di tornare alla pagina precedente
window.history.back();
}
startX = 0;
return; // Fermiamo lo script qui
}
// 2. SE SIAMO ALTROVE NEL FORUM (Apertura del menu)
const sidebarSelectors = [
".btn-sidebar-toggle",
".sidebar-toggle",
"button.header-dropdown-toggle.hamburger-dropdown",
"#toggle-hamburger-menu"
];
for (const selector of sidebarSelectors) {
const btn = document.querySelector(selector);
if (btn && btn.getBoundingClientRect().width > 0) {
btn.click();
break;
}
}
}
startX = 0;
startY = 0;
}, { passive: true, capture: true });
})();
</script>