jQuery(function($) {
function closeAllOffCanvas(exceptID = null) {
let anyOpen = false; // Track if another Off-Canvas remains open
$(".e-off-canvas").each(function() {
let canvasID = $(this).attr("id");
if (!exceptID || canvasID !== exceptID) {
$(this).removeClass("e-off-canvas-visible")
.addClass("e-off-canvas-hidden")
.attr("aria-hidden", "true")
.css({
"z-index": "10",
"visibility": "hidden",
"opacity": "0"
});
// Full removal delay set to 0ms
setTimeout(() => {
if ($(this).attr("aria-hidden") === "true") {
$(this).css("display", "none");
}
}, 0);
} else {
anyOpen = true; // At least one Off-Canvas is still open
}
});
}
function openOffCanvas(targetID) {
let targetCanvas = $(targetID);
if (targetCanvas.length) {
// Close all others EXCEPT the one we're opening
closeAllOffCanvas(targetID);
// Open immediately with delay set to 0ms
setTimeout(() => {
targetCanvas.removeClass("e-off-canvas-hidden")
.addClass("e-off-canvas-visible")
.attr("aria-hidden", "false")
.css({
"z-index": "9999",
"visibility": "visible",
"opacity": "1",
"display": "block"
});
// Ensure the White Background Stays Visible
$("body").addClass("off-canvas-active");
// Force repaint after opening
forceRepaint();
}, 0);
}
}
// Decode Base64
function decodeBase64(str) {
try {
return atob(str);
} catch (e) {
return null;
}
}
// Handle Elementor Off-Canvas OPEN clicks
$(document).on('click', '[href*="elementor-action%3Aaction%3Doff_canvas%3Aopen"]', function(event) {
event.preventDefault();
let href = decodeURIComponent($(this).attr("href"));
let base64Match = href.match(/settings=([^&]+)/);
if (base64Match) {
let decodedSettings = decodeBase64(base64Match[1]);
try {
let settingsObj = JSON.parse(decodedSettings);
if (settingsObj.id) {
let offCanvasID = "#off-canvas-" + settingsObj.id;
openOffCanvas(offCanvasID);
}
} catch (e) {}
}
});
// Handle Elementor Off-Canvas CLOSE clicks
$(document).on('click', '[href*="elementor-action%3Aaction%3Doff_canvas%3Aclose"]', function(event) {
event.preventDefault();
closeAllOffCanvas();
});
// Ensure all Off-Canvas elements start hidden (ONLY if NOT in Elementor Editor)
function initializeOffCanvasVisibility() {
// Check if the body does NOT have the Elementor edit mode class
if (!$('body').hasClass('elementor-element-edit-mode')) {
$(".e-off-canvas").each(function() {
$(this).attr("aria-hidden", "true").css({
"z-index": "10",
"visibility": "hidden",
"opacity": "0",
"display": "none"
});
});
}
}
// Call the initialization function
$(window).on('load', initializeOffCanvasVisibility);
// Utility function to force repaint
function forceRepaint() {
if ($('body').length) {
$('body')[0].style.display = 'none';
$('body')[0].offsetHeight;
$('body')[0].style.display = '';
}
}
});