-
Intake: req-077
-
Alvo de validação: VALIDATION-CHECKLIST.md#batch-077
-
Decisão: DEC-079
-
Base: correções pós-teste visual do BATCH-075 (Dashboard Site Toolbar / edição in-place).
Escopo (2 slices)
Slice 1 — Desacoplamento do script da toolbar do iframe
Extrair a lógica JavaScript embutida na tag <script> do template dashboard-site-toolbar.html
(pt-br/en) para um arquivo estático próprio e injetá-lo dinamicamente.
-
Novo arquivo:
gestor/modulos/dashboard/dashboard.iframe-toolbar.js(IIFE da toolbar: toggle de edição, resize do iframe, ponte de postMessage com a hospedeira). -
HTML (
dashboard-site-toolbar.htmlpt-br/en): remoção da tag<script>…</script>final. -
Injeção:
gestor_pagina_javascript_incluir(Array('tipo'=>'iframe-toolbar','modulo_id'=>'dashboard'))emdashboard_site_toolbar(). O hífen emiframe-toolbarcasa a regex/^[A-Za-z0-9-]+$/do roteadorarquivo-estatico.php(URLdashboard/iframe-toolbar.js→ físicodashboard.iframe-toolbar.js). -
Limpeza: removido o órfão vazio
dashboard.iframe.toolbar.js(0 bytes, sem referências).
Slice 2 — Mapeamento inteligente de variáveis/atributos no Live Editor
Trocar a substituição destrutiva de root.innerHTML (que quebrava scripts/CSS/estado do site
vivo) por preservação do DOM vivo + anotação por mapeamento contra o HTML original.
-
Backend (
dashboard_ajax_site_toolbar_render): passa a devolver o HTML CRU original (content_raw=paginas.html;layout_raw= body-inner do layout com o slot@[[pagina#corpo]]@preenchido por#c2f-raw-content). Campos legados (html/layout_htmlcom caixas) mantidos p/ retrocompat (painel de backups). -
Frontend (
dashboard.toolbar.js):-
startEdit: guarda o cru num container oculto#paginaHTMLAntesEdicaoe NÃO substitui oroot.innerHTML. ChamamapTree(root, backup)(varredura paralela viva × original): -
variável em atributo → marca a tag viva com
data-c2f-variable="ID_VAR_N"+varMap[ID] = {param, variable, valor}; o valor resolvido continua visível no editor; -
variável em texto →
annotateTextVarsenvolve o trecho numspan.c2f-var-boxprotegido; -
widget →
mapTreeenvolve a expansão viva numdiv.c2f-widget-boxatômico (âncora por assinatura estrutural do próximo nó após o bloco de widget no cru). -
saveEdit/reconstructOriginal: restauradata-c2f-variable→notação@[[…]]@(só quando o valor não foi alterado pelo usuário) e caixas→marcador original; separa#c2f-page-content(→paginas) do resto do layout com#c2f-page-content→@[[pagina#corpo]]@(→layouts), conforme orientação do Engenheiro Chefe (o body vivo mistura HTML delayoutse depaginas).
-
Validação
-
Estática:
node --check(2 JS) OK;php -l(dashboard.php) OK;<div>5/5 balanceado nos 2 HTMLs. -
Lógica do motor (happy-dom, arquivo real via message-bus): 16/16 — atributos (aceite), variável de texto e widget mapeados e reconstruídos; DOM vivo preservado.
-
Runtime (deploy
Update => Core+ edição visual real comhtml-editor.js): pendente com o operador.