From f7a1c2dffc67f91d07224a90dbd0390d391f40e0 Mon Sep 17 00:00:00 2001 From: komkida91 Date: Sun, 1 Mar 2026 14:13:35 +0100 Subject: [PATCH] fix(builder): evitar caos de layout cuando free-drag no tiene posiciones validas --- elementor/templates/elementor_builder.html | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/elementor/templates/elementor_builder.html b/elementor/templates/elementor_builder.html index a64eae8..5b83d2a 100644 --- a/elementor/templates/elementor_builder.html +++ b/elementor/templates/elementor_builder.html @@ -2940,6 +2940,15 @@ const state = { }); return true; } + function hasMeaningfulFreeDragPositions(blocks){ + const nonMenu = (Array.isArray(blocks) ? blocks : []).filter((b)=>b && b.type !== "menu"); + if (!nonMenu.length) return false; + const positioned = nonMenu.filter((b)=>{ + const p = b && b.pos; + return p && Number.isFinite(Number(p.x)) && Number.isFinite(Number(p.y)); + }); + return positioned.length >= Math.max(2, Math.ceil(nonMenu.length * 0.5)); + } async function saveContent(){ if (isSaving) return; isSaving = true; @@ -3013,8 +3022,14 @@ const state = { state.blocks.forEach(b=>{ if (!b.page) b.page = "home"; }); state.settings.free_drag = false; } else { - // Restaurante usa posicionamiento libre para colocar bloques donde el usuario quiera. - state.settings.free_drag = initialRubro === "restaurante"; + const savedFreeDrag = typeof state.settings.free_drag === "boolean" ? state.settings.free_drag : false; + if (!savedFreeDrag){ + state.settings.free_drag = false; + } else { + // Compatibilidad: si un sitio viene marcado como free_drag pero no tiene posiciones + // reales, volvemos a flujo normal para evitar superposicion de bloques. + state.settings.free_drag = hasMeaningfulFreeDragPositions(state.blocks); + } } selectedBlockId = null; wireSidebar();