BATCH-001 - Sincronização de Projetos Específicos
-
[x] Novo script
sync-core-to-project.shcriado e funcional-
[x] Recebe
--projectou-p -
[x] Lê
devProjects.<ID>.targetcom fallback paradevProjects.<ID>.path_tests -
[x] Executa rsync com exclusões adequadas (
.git/,logs/,temp/,resources.map.php) e mantémdb/data/no sync do core
-
-
[x] Script
synchronize-project.shmodificado-
[x] Faz fallback automático de
targetparapath_tests
-
-
[x] Script
updates-manager-database.shmodificado-
[x] Recebe
--projectou-p -
[x] Resolve
dockerPathespecífico ou deriva a partir depath_tests/target
-
-
[x] Tasks registradas no
.vscode/tasks.json-
[x]
?️ Projects - Resources Core -> ID -
[x]
?️ Projects - Sync Core -> ID -
[x]
?️ Projects - Synchronize => Resources -> ID -
[x]
?️ Projects - Synchronize => Files -> ID -
[x]
?️ Projects - Synchronize => Database -> ID -
[x]
?️ Projects - Update => All - Core & Project -
[x]
?️ Projects - Update => Project -
[x]
?️ Projects - Update => Core
-
-
[x] Teste end-to-end de execução das tarefas compostas de atualização para
[REDACTED]-local
Evidência registrada em 2026-05-25 (Fase 1)
-
Comandos executados:
-
bash ./ai-workspace/en/scripts/projects/synchronize-project.sh --project [REDACTED]-local checksum -
bash ./ai-workspace/en/scripts/projects/sync-core-to-project.sh --project [REDACTED]-local -
bash ./ai-workspace/en/scripts/projects/sync-core-to-project.sh --project [REDACTED]-local && bash ./ai-workspace/en/scripts/projects/update-resource-data.sh --project [REDACTED]-local && bash ./ai-workspace/en/scripts/projects/synchronize-project.sh --project [REDACTED]-local checksum && bash ./ai-workspace/en/scripts/dev-environment/updates-manager-database.sh --project [REDACTED]-local
-
-
Resultado observado:
-
fallback
target -> path_testsconfirmado para[REDACTED]-local -
sync-core-to-project.shexecutado com rsync e sem transferirdb/data,logs,tempouresources.map.php -
atualização de recursos concluída com relatório final sem problemas
-
dockerPathderivado para[REDACTED]e migrações concluídas via Docker
-
-
Pendências ou riscos restantes:
-
Falta rodar a geração de recursos no core antes de fazer a sincronização com o projeto (identificado no log req-002.md).
-
Evidência registrada em 2026-05-25 (Fase 2 - ajuste req-002)
-
Comandos executados:
-
php ./gestor/controladores/agents/arquitetura/atualizacao-dados-recursos.php && bash ./ai-workspace/en/scripts/projects/sync-core-to-project.sh --project [REDACTED]-local && bash ./ai-workspace/en/scripts/projects/update-resource-data.sh --project [REDACTED]-local && bash ./ai-workspace/en/scripts/projects/synchronize-project.sh --project [REDACTED]-local checksum && bash ./ai-workspace/en/scripts/dev-environment/updates-manager-database.sh --project [REDACTED]-local -
task VS Code
?️ Projects - Resources Core -> ID -
task VS Code
?️ Projects - Update => All - Test Environment
-
-
Resultado observado:
-
recursos do core compilados antes da sincronização do core, com relatório final de
2014itens e nenhum problema detectado -
sync-core-to-project.shexecutado com rsync após a compilação do core e mantendo a exclusão dedb/data,logs,temperesources.map.php -
a task composta do VS Code percorreu a cadeia até
?️ Projects - Synchronize => Database -> ID, encerrando comDatabase updates completed successfully!
-
-
Pendências ou riscos restantes:
-
sem pendências funcionais abertas para o ajuste do req-002 no BATCH-001
-
Evidência registrada em 2026-05-25 (Fase 3 - ajuste db/data no sync do core)
-
Comandos executados:
-
bash -n ./ai-workspace/en/scripts/projects/sync-core-to-project.sh -
bash ./ai-workspace/en/scripts/projects/sync-core-to-project.sh --project [REDACTED]-local -
php ./gestor/controladores/agents/arquitetura/atualizacao-dados-recursos.php && bash ./ai-workspace/en/scripts/projects/sync-core-to-project.sh --project [REDACTED]-local && bash ./ai-workspace/en/scripts/projects/update-resource-data.sh --project [REDACTED]-local && bash ./ai-workspace/en/scripts/projects/synchronize-project.sh --project [REDACTED]-local checksum && bash ./ai-workspace/en/scripts/dev-environment/updates-manager-database.sh --project [REDACTED]-local
-
-
Resultado observado:
-
sync-core-to-project.shpassou na validação sintática Bash sem erros -
o comando rsync passou a executar sem
--exclude /db/data/ -
a execução real do sync listou
db/data/e os arquivos*Data.jsondo core na transferência para[REDACTED]-local -
o pipeline completo voltou a concluir com compilação de recursos do core, sync do core, compilação de recursos do projeto, sync do projeto e atualização de banco com sucesso
-
-
Pendências ou riscos restantes:
-
sem pendências funcionais abertas para o ajuste de
db/datano BATCH-001
-
Evidência registrada em 2026-05-25 (Fase 4 - Nova divisão de tasks em 3 fluxos)
-
Comandos/Tarefas executados:
-
task VS Code
?️ Projects - Update => All - Core & Project -
task VS Code
?️ Projects - Update => Project -
task VS Code
?️ Projects - Update => Core
-
-
Resultado observado:
-
As três novas tarefas compostas foram adicionadas a
.vscode/tasks.jsoncom sucesso. -
?️ Projects - Update => All - Core & Projectexecuta sequencialmente o pipeline completo (recursos do core, sync do core, banco intermediário, recursos do projeto, arquivos do projeto e banco final). -
?️ Projects - Update => Projectatualiza apenas os recursos, arquivos e banco do projeto. -
?️ Projects - Update => Coreatualiza apenas os recursos, arquivos (sync) e banco do core no projeto. -
A sincronização de core respeita a inclusão da pasta
db/datapara garantir a cópia dos JSONs de dados compilados do gestor.
-
-
Pendências ou riscos restantes:
-
sem pendências funcionais ou operacionais abertas para o BATCH-001.
-
BATCH-002 - Motor de Widgets Envelopados e Módulo Publisher Highlights
-
[x] Motor de Widgets Envelopados (Regex de parsing de comentários no core
gestor.php) -
[x] Injeção de parâmetro
$paramsArray['html']no callback de widgets (widgets.php) -
[x] Criação da tabela
publisher_highlightsno banco local via Phinx migration -
[x] Mapeamento e deploy do módulo
publisher-highlights -
[x] Testes administrativos do CRUD (Adicionar, Editar e Clonar)
-
[x] Integração com
html-editor.php(edição de HTML/CSS do banco e salvamento) -
[x] Renderização do widget com isolamento do item template via
<!-- item < -->e substituição de placeholders -
[x] Retrocompatibilidade confirmada com a sintaxe legada
@[[widgets#...]]@
Evidência registrada em 2026-05-25 (Fase 1)
-
Comandos/Procedimentos executados:
-
Verificação de logs e código para a Regex
/<!--\s*widgets#(.+?)\s*<\s*-->([\s\S]*?)<!--\s*widgets#\s*\\1\s*>\s*-->/iemgestor.php. -
Execução de Phinx migrations locais para atualizar a tabela
publisher_highlights. -
Edição de layouts usando os marcadores de wrapper de widget e validação de injeção dinâmica no Docker.
-
-
Resultado observado:
-
O motor do core interceptou com sucesso os comentários estáticos de preview e os substituiu pela renderização dinâmica a partir do template cadastrado no banco.
-
A interface de vinculação dinâmica de placeholders foi exibida e funcionou sem erros no CRUD de edição.
-
As tags legadas de widgets em linha continuam renderizando perfeitamente.
-
-
Pendências ou riscos restantes:
-
Nenhuma pendência aberta para a integração de Core Widgets e Highlights.
-
BATCH-003 - Correções e Melhorias do Módulo Publisher Highlights
-
[ ] Formulário completo em adicionar/clonar/editar
-
[ ] Adicionar inclui regra, modelo, mapeamento e editor HTML/CSS (mesma estrutura do editar)
-
[ ] Clonar inclui regra, modelo e mapeamento, preservando o html/css do registro de origem
-
[ ] Backend grava
fields_schema,htmlecssem todas as três rotas
-
-
[ ] Substituição do placeholder
#template_placeholder_option#em todas as rotas -
[ ] Dropdown
template_id-
[ ] Lista templates ativos com
target='publisher-highlights'na linguagem corrente -
[ ] Marca
selectedo template ativo no registro em edição
-
-
[ ] Visibilidade dinâmica do
.template-options-wrappercontrolada pelotemplate_id -
[ ] Regra "Automática" com dropdown de ordenação (
order_by) e renderizador respeitando a opção -
[ ] Regra "Manual" usando dropdown múltiplo Fomantic (
.ui.multiple.search.selection.dropdown)-
[ ] AJAX
publisher-pages-searchretornando páginas ativas filtradas porpublisher_id -
[ ] Limpeza de seleção quando
publisher_idmuda -
[ ] Pré-hidratação na tela de edição/clonagem com nomes resolvidos
-
-
[ ] Editor HTML/CSS exibindo variáveis
[[item#NOME]](não[[publisher#TIPO#ID]]) no alvopublisher-highlights
Evidência registrada em 2026-05-26 (Fase 1)
-
Implementação dos sete itens do req-004 nos arquivos:
-
gestor/modulos/publisher-highlights/publisher-highlights.php -
gestor/modulos/publisher-highlights/publisher-highlights.js -
gestor/modulos/publisher-highlights/publisher-highlights.widget.php -
gestor/modulos/publisher-highlights/publisher-highlights.json -
gestor/modulos/publisher-highlights/resources/pt-br/pages/publisher-highlights-{adicionar,editar,clonar}/*.html -
gestor/modulos/publisher-highlights/resources/en/pages/publisher-highlights-{adicionar,editar,clonar}/*.html -
gestor/bibliotecas/html-editor.php -
gestor/assets/interface/html-editor-interface.js
-
-
Pendência: testes manuais no ambiente local (Docker) para confirmar:
-
dropdowns populados (publisher, template, manual selection)
-
visibilidade dinâmica
template-options-wrapper -
ordenação
order_byaplicada no widget -
editor exibindo
[[item#NOME]]corretamente
-
BATCH-004 - Renomeação Física de Diretórios e Arquivos de Templates
-
[x] Diretórios
resources/pt-br/templates/renomeados com prefixopublisher-highlights--
[x]
noticias-lista-simples→publisher-highlights-noticias-lista-simples -
[x]
noticias-grid-cards→publisher-highlights-noticias-grid-cards -
[x]
artigos-editorial→publisher-highlights-artigos-editorial -
[x]
lives-video-destaque→publisher-highlights-lives-video-destaque -
[x]
notas-mosaico→publisher-highlights-notas-mosaico -
[x]
destaque-principal-carousel→publisher-highlights-principal-carousel
-
-
[x] Diretórios
resources/en/templates/renomeados com prefixopublisher-highlights--
[x]
noticias-lista-simples→publisher-highlights-noticias-lista-simples -
[x]
noticias-grid-cards→publisher-highlights-noticias-grid-cards -
[x]
artigos-editorial→publisher-highlights-artigos-editorial -
[x]
lives-video-destaque→publisher-highlights-lives-video-destaque -
[x]
notas-mosaico→publisher-highlights-notas-mosaico -
[x]
destaque-principal-carousel→publisher-highlights-destaque-principal-carousel
-
-
[x] Arquivos
.htmlinternos renomeados para corresponder ao novo nome do diretório (pt-br e en) -
[x] Checksums dos templates no JSON já estavam como strings vazias (prontos para recálculo pelo pipeline)
Evidência registrada em 2026-05-26
-
Renomeação executada via PowerShell; 12 arquivos HTML confirmados com nomes alinhados ao
iddo JSON -
Próximo passo: rodar
?️ Projects - Update => Corepara recalcular checksums via pipeline UPSERT
BATCH-005 - Correções Visuais, Simulação, Mapeamento e Fallback (req-006)
-
[x] Item 1 — Dropdown de itens manuais vazio corrigido
-
[x]
publisher_highlights_ajax_publisher_pages_search: INNER JOIN compublisher_pages, filtro porpp.publisher_id -
[x]
publisher_highlights_ajax_publisher_pages_fetch: mesmo fix
-
-
[x] Item 2 — Iframe atualiza automaticamente ao selecionar template
-
[x]
window.html_editor_refresh_previewexposto no html-editor-interface.js -
[x]
publisher-highlights.jschamahtml_editor_refresh_previewapósset_html/set_css
-
-
[x] Item 3 — Simulação de variáveis
@[[item#...]]@no html-editor-
[x] Bloco
publisher-highlightsadicionado ao início depublisherVariablesOrSimulation -
[x] Replica o bloco
<!-- item < -->..<!-- item > -->N vezes (count do schema) -
[x] Mapeia
@[[item#VAR]]@→variable_mapping→ tipo →.hep-simulation-${tipo} .item
-
-
[x] Item 4 — Segmento Fomantic com borda/fundo branco (
basic fittedremovidos)-
[x] Todas as 6 páginas HTML (pt-br e en):
ui segment template-options-wrapper
-
-
[x] Item 5 — Margens nos labels descritivos e botões de mapeamento
-
[x]
style="margin: 8px 0; display: block;"nosui labelinformativos (6 páginas) -
[x]
style="margin-bottom:6px;margin-right:6px;"nos botões.item-vare.publisher-field
-
-
[x] Item 6 — Campos do publisher filtrados por
linked_template: true-
[x]
publisher_highlights_ajax_publisher_load: lêtemplate_map, montalinked_ids, filtrafields -
[x] Fallback: se nenhum campo tiver
linked_template, inclui todos (retrocompatível)
-
-
[x] Items 7+9 — Suporte ao bloco
no-itemno widget renderer-
[x]
publisher-highlights.widget.php: detecta<!-- no-item < -->..<!-- no-item > --> -
[x] Sem publicações: usa conteúdo do
no-item(ou retorna''se não existir) -
[x] Com publicações: remove bloco
no-itemantes de processar o loop de itens
-
-
[x] Item 8 — Bloco
no-iteminserido nos 12 templates físicos-
[x] 6 pt-br com
<h3>Nenhuma publicação encontrada</h3> -
[x] 6 en com
<h3>No publications found</h3> -
[x] Checksums dos templates no JSON já estavam vazios (prontos para recálculo)
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/modulos/publisher-highlights/publisher-highlights.php -
gestor/modulos/publisher-highlights/publisher-highlights.js -
gestor/modulos/publisher-highlights/publisher-highlights.widget.php -
gestor/assets/interface/html-editor-interface.js -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/pages/publisher-highlights-{adicionar,editar,clonar}/*.html -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/templates/**/*.html(12 templates)
-
-
Pendência: testes manuais no ambiente local (Docker) para confirmar:
-
dropdown de itens manuais populado com páginas do publisher
-
iframe atualiza ao trocar template
-
simulação preenche variáveis
@[[item#...]]@com dados fictícios -
segment com fundo branco e botões com margem
-
campos do publisher filtrados por
linked_template -
bloco
no-itemexibido quando não há publicações
-
BATCH-006 - Diagnóstico de Select, Mapeamento e Preview Real (req-007)
-
[x] Item 1 — Diagnóstico do select vazio
-
[x] JS:
beforeSendenviapublisher_id/qna raiz E emparams(fallback duplo) -
[x] PHP:
publisher-pages-searchepublisher-pages-fetchlêem$_REQUEST['params'][X] ?? $_REQUEST[X] -
[x] PHP: chave
debugna resposta com SQL, valores, contagem e idioma
-
-
[x] Item 2 — Ocultar itens já mapeados nas colunas
-
[x]
renderItemVars: variáveis presentes emvariable_mappingsão filtradas -
[x]
renderPublisherFields: campos já usados como valor no mapeamento são filtrados -
[x] Ao remover vínculo, colunas são re-renderizadas automaticamente
-
-
[x] Item 3 — Separar campos padrões (grey) e dinâmicos (teal)
-
[x] Padrões:
titulo,url,dataem botõesui basic small button grey -
[x] Dinâmicos: demais campos em botões
ui basic small button teal -
[x] Subtítulos
Campos PadrõeseCampos Dinâmicos(i18n via skeleton)
-
-
[x] Item 4 — Editor/visualizador em abas + AJAX widget-preview
-
[x] Páginas (6×) com header renomeado
Conteúdo do Destaque -
[x]
html-editor-interface.jsoculta abasmodelos,assistente-ia,publisher-variablespara alvo highlights -
[x] APIs públicas
html_editor_get_html/get_css/set_iframe_html/on_editor_change -
[x] PHP: endpoint
widget-previewchamapublisher_highlights_widget_render_inline -
[x] JS:
scheduleWidgetPreviewcom debounce 400ms + snapshot-diff para evitar chamadas redundantes -
[x] Refresh dispara em: troca de template, troca de publisher, troca de rule/count/order_by, mapeamento link/unlink, seleção manual, edição de HTML/CSS, clique na aba do visualizador
-
-
[x] Item 5 — Componente de simulação dedicado para highlights
-
[x]
gestor/resources/{pt-br,en}/components/html-editor-publisher-highlights-simulation/html-editor-publisher-highlights-simulation.htmlcriados -
[x] Tipos:
text,textarea,image,url,date(sem variantes sofisticadas) -
[x]
html-editor.phpcarrega o componente específico quandoalvo === 'publisher-highlights' -
[x]
.publisher-design-mode-simulationocultado para alvo highlights -
[x] Detecção de tipo em
publisherVariablesOrSimulationmapeiadata/date → dateeresumo/descri → textarea
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/modulos/publisher-highlights/publisher-highlights.php(AJAXes com debug + endpoint widget-preview) -
gestor/modulos/publisher-highlights/publisher-highlights.js(render colunas, scheduleWidgetPreview, hooks) -
gestor/modulos/publisher-highlights/publisher-highlights.widget.php(refatoração render_inline) -
gestor/assets/interface/html-editor-interface.js(APIs públicas, oculta abas, detecção tipo) -
gestor/bibliotecas/html-editor.php(carregamento do novo componente de simulação) -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/pages/**/*.html(header + skeletons)
-
-
Arquivos criados:
-
gestor/resources/pt-br/components/html-editor-publisher-highlights-simulation/html-editor-publisher-highlights-simulation.html -
gestor/resources/en/components/html-editor-publisher-highlights-simulation/html-editor-publisher-highlights-simulation.html
-
-
Pendência: rodar
?️ Projects - Update => Corepara registrar o novo componente emComponentesData.jsone calcular checksums; depois validar manualmente:-
dropdown manual populado (inspecionar
debug.sqlno Network) -
colunas de variáveis/campos ocultam itens mapeados
-
botões padrões em cinza, dinâmicos em teal
-
abas extras escondidas, header
Conteúdo do Destaquevisível -
prévia ao vivo no iframe ao mudar regras/seleção/editor
-
simulação usa massa simplificada (sem quebras de layout)
-
BATCH-007 - Busca Manual, Abas Externas e Fallback de Simulação (req-008)
-
[x] Item 1 — Busca manual no dropdown de Itens selecionados
-
[x]
apiSettingsremovido empublisher-highlights.js -
[x] Dropdown inicializado localmente; listener
input/keyupdebounced (250ms) noinput.searchinterno -
[x] AJAX manual para
publisher-pages-searchcompublisher_ideqna raiz e emparams -
[x]
<select>atualizado preservando opções selecionadas +dropdown('refresh')+set selected -
[x] Disparo inicial e em troca de publisher (
resetManualItemsDropdownchamamanualItemsSearch(''))
-
-
[x] Item 2 — Abas externas "Pré-Visualização" / "Editor HTML" e sincronização
-
[x] Ocultamento de sub-abas internas do html-editor revertido (5 sub-abas originais intactas)
-
[x] 6 páginas (pt-br + en × adicionar/editar/clonar) com
.menuConteudoDestaqueenvolvendo iframe externo +#html-editor# -
[x] JS:
$('.menuConteudoDestaque .item').tab()inicializa as abas -
[x] Novo iframe
#iframe-publisher-highlights-previewrecebe o HTML do AJAXwidget-preview -
[x]
window.updatedCodeMirrorHtmldefinido empublisher-highlights.js→ disparascheduleWidgetPreview(false) -
[x] Listener antigo
html_editor_on_editor_changeremovido (substituído pelo hook global existente)
-
-
[x] Item 3 — Fallbacks na simulação de destaques
-
[x]
urlretorna'#'quando.hep-simulation-url .itemvazio -
[x]
dateretorna'27/05/2026'quando.hep-simulation-date .itemvazio -
[x] Demais tipos caem em
.hep-simulation-text .itemautomaticamente
-
-
[x] Item 4 — Componente
html-editor-publisher-highlights-simulation(recap req-007)-
[x] Arquivos pt-br e en presentes em
resources/components/ -
[x]
html-editor.phpcarrega o componente específico para alvo highlights -
[x]
.publisher-design-mode-simulationpermanece oculto para alvo highlights
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/assets/interface/html-editor-interface.js(reverteu ocultamento de abas internas; adicionou fallbacks url/date/text) -
gestor/modulos/publisher-highlights/publisher-highlights.js(busca manual, hookupdatedCodeMirrorHtml, refresh do iframe externo) -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/pages/**/*.html(6 páginas com menu de abas externas)
-
-
Componentes inalterados desde BATCH-006:
-
gestor/resources/{pt-br,en}/components/html-editor-publisher-highlights-simulation/html-editor-publisher-highlights-simulation.html
-
-
Pendência: rodar
?️ Projects - Update => Corepara recalcular checksums das páginas alteradas; validar manualmente:-
dropdown manual lista páginas ao digitar (Network mostra
publisher-pages-search) -
5 sub-abas internas do html-editor visíveis dentro da aba "Editor HTML"
-
aba "Pré-Visualização" renderiza widget com dados reais
-
alterações no CodeMirror disparam refresh automático debounced
-
variáveis
urledataaparecem substituídas (não literais) na simulação
-
BATCH-008 - Variáveis sem Arrobas, Regex de Simulação e Debounce Global (req-009)
-
[x] Item 1a — Remover arrobas dos rótulos dinâmicos no JS
-
[x]
renderItemVars: botão exibe[[item#X]] -
[x]
renderLinkedVars: rótulo da variável exibe[[item#X]]
-
-
[x] Item 1b — HTMLs de
pages/permanecem com@[[item#...]]@(cópia direta do banco)-
[x] Pulado por orientação do Engenheiro Chefe — ver memória
feedback-conn2flow-variaveis-html-paginas
-
-
[x] Item 2 — Regex de simulação dos destaques sem arrobas
-
[x]
publisherVariablesOrSimulation(alvopublisher-highlights) usa/\[\[item#([a-zA-Z0-9_\-]+)\]\]/g
-
-
[x] Item 3 — Sincronização do mapeamento com a aba do editor
-
[x]
syncEditorVariables()chamawindow.publisher_highlights_update_target_variables(availableItemVars) -
[x] Disparada em: link (
.publisher-fieldclick), unlink ([data-unlink]click), troca de template
-
-
[x] Item 4 — Debounce global em todos os controles relevantes
-
[x]
#template_id(com fallback para template vazio) → schedule -
[x]
#rule,#count,#order_by→ schedule -
[x]
#selected_items(Fomantic onChange) → schedule -
[x] Mapeamento link/unlink → schedule
-
[x] CodeMirror HTML → schedule via
window.updatedCodeMirrorHtml -
[x]
scheduleWidgetPreviewusa debounce 400ms + snapshot-diff (mantido do BATCH-006)
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/modulos/publisher-highlights/publisher-highlights.js(rótulos sem arrobas,syncEditorVariables, template empty → schedule) -
gestor/assets/interface/html-editor-interface.js(regex de simulação sem arrobas)
-
-
Pendência: rodar
?️ Projects - Update => Core(apenas JS, não há mudança em páginas HTML); validar manualmente:-
botões de variáveis aparecem como
[[item#X]]sem@@ -
simulação substitui variáveis no preview interno (não aparecem literais)
-
vínculo/desvínculo de variáveis atualiza imediatamente a aba lateral do editor
-
todas as alterações nos selects/inputs disparam o iframe externo após ~400ms
-
BATCH-009 - Persistência template_id, Preview Mapeado, Simulação Completa e Limpeza Final (req-010)
-
[x] Item 1 —
template_idpersistido emfields_schema(sem coluna nova)-
[x] JS: hidratação no init via
$('#template_id').dropdown('set selected', ...) -
[x] JS: serialização no submit (
schema.template_id = $('#template_id').val()) -
[x] PHP
adicionar: default'template_id' => ''em$schema_inicial -
[x] PHP
editar:$fields_schema_decoded += [...'template_id' => '']+publisher_highlights_template_options($fields_schema_decoded['template_id']) -
[x] PHP
clonar: idem ao editar
-
-
[x] Item 2 — Normalização de
fields_valuesno widget-
[x]
publisher_highlights_widget_buscar_publicacoesconverte[{id, value}, ...]→{id: value, ...}antes doarray_merge -
[x] Decodificação aceita
'[]'como default (em vez de'{}')
-
-
[x] Item 3 — Fallbacks robustos na simulação JS
-
[x]
image→https://picsum.photos/seed/highlights/800/450 -
[x]
url→'#' -
[x]
date→'27/05/2026' -
[x] Demais buckets vazios caem em
.hep-simulation-text -
[x] Último recurso:
textarea→ resumo simulado; outros → "Título Simulado de Destaque"
-
-
[x] Item 4 — Refresh do preview interno ao trocar
template_id-
[x]
$template.on('change')chamawindow.html_editor_refresh_preview()(delay 150ms)
-
-
[x] Item 5 — Arrobas removidos dos textos decorativos
-
[x]
<kbd>@[[item#...]]@</kbd>→<kbd>[[item#...]]</kbd>em 6 páginas -
[x]
<code>@[[item#nome_da_variavel]]@</code>→<code>[[item#nome_da_variavel]]</code>em editar/adicionar (pt-br + en)
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/modulos/publisher-highlights/publisher-highlights.js(hidratação + submit do template_id; refresh do preview) -
gestor/modulos/publisher-highlights/publisher-highlights.php(defaults com template_id; chamada de template_options com valor restaurado) -
gestor/modulos/publisher-highlights/publisher-highlights.widget.php(normalização fields_values) -
gestor/assets/interface/html-editor-interface.js(fallbacks robustos por tipo) -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/pages/**/*.html(6 páginas com[[item#...]])
-
-
Pendência: rodar
?️ Projects - Update => Corepara recompilar páginas; validar manualmente que:-
template_id selecionado é restaurado ao reabrir o registro em editar/clonar
-
campos customizados (subtitulo, conteudo, etc.) renderizam no preview do widget
-
simulação substitui todas as variáveis (titulo, resumo, url, imagem, data) mesmo antes do deploy do componente
-
troca de modelo recarrega o preview interno do editor
-
títulos das colunas de mapeamento aparecem como
[[item#...]]sem@@
-
BATCH-010 - Ordem Manual, Hidratação, Vínculo no Inserir e Simulação Diversificada (req-011)
-
[x] Item 1 — Preservação da ordem cronológica na curadoria manual
-
[x]
jquery-custom-dropdown.js: array internothis.selectedIdsmantido em ordem de cliques -
[x]
settings()retorna callbacksonAdd(remove e re-empurra) eonRemove -
[x]
setValues(values, selectedIds)sincronizathis.selectedIdsantes doset exactly -
[x]
syncSelectionusathis.selectedIds.slice()(não o<select>.val()estrutural) -
[x]
publisher-highlights.js(submit erefreshWidgetPreview): só sobrescreveschema.selected_itemsdo<select>quandorule !== 'manual'
-
-
[x] Item 2 — Hidratação visual dos selects
#rulee#order_by-
[x]
setTimeout(50)chama.dropdown('set selected', ...)em ambos após a inicialização
-
-
[x] Item 3 — Inserção mostra a aba de variáveis para destaques
-
[x]
html-editor.php: para$alvo_atual === 'publisher-highlights', força$tem_vinculo = trueindependente de$target_variables
-
-
[x] Item 4 — Simulação dinâmica sem duplicidades
-
[x]
.publisher-design-mode-simulationremovido do DOM ao simular destaques -
[x] Offsets rastreados por
varName(uma chave por variável), não porfieldType -
[x] Índice final:
(i + offsets[varName]) % simulItems.length— cards e variáveis vizinhas diferem
-
-
[x] Item 5 — Enriquecimento da massa mock
-
[x]
text: 20 títulos (pt-br) / 20 títulos (en) -
[x]
textarea: 12 resumos (pt-br) / 12 resumos (en) -
[x]
image: 15 URLs picsum com seeds variadas -
[x]
url: 12 caminhos fictícios -
[x]
date: 12 datas escalonadas em 2026
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/assets/interface/jquery-custom-dropdown.js(selectedIds + onAdd/onRemove + setValues + syncSelection) -
gestor/modulos/publisher-highlights/publisher-highlights.js(preservação da ordem manual + hidratação rule/order_by) -
gestor/bibliotecas/html-editor.php(tem_vinculo sempre verdadeiro para highlights) -
gestor/assets/interface/html-editor-interface.js(offsets por varName + remoção do design-mode)
-
-
Arquivos sobrescritos:
-
gestor/resources/{pt-br,en}/components/html-editor-publisher-highlights-simulation/html-editor-publisher-highlights-simulation.html(massa mock enriquecida)
-
-
Pendência: rodar
?️ Projects - Update => Corepara deployar componente mock + JS atualizado; validar manualmente:-
clicar Nota 2 → Nota 1 preserva essa ordem no preview e no banco
-
selects de Regra e Ordenação refletem o valor salvo ao reabrir um registro
-
na tela "Adicionar", após escolher o modelo, a aba de variáveis aparece e permite mapeamento
-
simulação com 6+ cards mostra dados distintos para títulos e resumos vizinhos
-
BATCH-011 - Nova Aba "Código do Widget" no Editor de Destaques (req-012)
-
[x] Item 1 — Aba e contêiner adicionados nas 6 páginas
-
[x] Menu
.menuConteudoDestaqueganhou<a data-tab="hep-widget">(pt-br: "Código do Widget", en: "Widget Code") -
[x] Cada página inclui
<div data-tab="hep-widget">com.ui icon message infoexplicando o uso +<textarea id="hep-widget-code">
-
-
[x] Item 2 — Inicialização e atualização do CodeMirror
-
[x]
contentHighlightsTabHandler('hep-widget')chamaupdateWidgetCodeTab() -
[x]
updateWidgetCodeTabre-tenta comsetTimeout(100)seCodeMirrorainda não disponível -
[x] Instância única (
widgetCodeMirror) commode:'text/html',readOnly:true,lineNumbers:true,lineWrapping:true -
[x] Slug derivado de
gestor.moduloRegistroIdou placeholder localizado ([slug-do-destaque]/[highlight-slug]) -
[x] HTML interno obtido via
window.html_editor_get_html()(API exposta no BATCH-006) -
[x] Saída no formato
<!-- widgets#publisher-highlights->render({"grupo_slug":"SLUG"}) < -->\nHTML\n<!-- ... > --> -
[x]
getDoc().setValue(...)+.refresh()aplicados ao final
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/modulos/publisher-highlights/publisher-highlights.js(case'hep-widget'no handler +updateWidgetCodeTab) -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/pages/publisher-highlights-{adicionar,editar,clonar}/*.html(6 páginas)
-
-
Pendência: rodar
?️ Projects - Update => Corepara recompilar páginas; validar manualmente:-
clicar na aba "Código do Widget" abre CodeMirror com
<!-- widgets#publisher-highlights->render({"grupo_slug":"<slug>"}) < --> ... > --> -
editar HTML no editor e voltar para a aba reflete o novo conteúdo
-
na tela "Adicionar", slug aparece como
[slug-do-destaque]/[highlight-slug]antes de salvar -
editor é read-only (cursor visível mas teclas não modificam)
-
BATCH-013 - Correção de Sincronização, CodeMirror e Renderização do Widget (req-013)
-
[x] Item 1 — Flag
ignoreCallbacksprevine loops em mutações programáticas-
[x] Construtor inicializa
this.ignoreCallbacks = false -
[x]
setValuesenvolvechange values/clear/set exactlyemtry/finallysetando a flag -
[x]
onAddeonRemoveretornam imediatamente quando a flag está ativa
-
-
[x] Item 2 —
syncSelectionsimplificada-
[x] Retorna imediatamente se
ignoreCallbacksativa -
[x] Confia sempre em
this.selectedIds.slice(); removida a reidratação porreadSelection()
-
-
[x] Item 3 — Acoplamento
setSelectedIds → scheduleWidgetPreviewvalidado-
[x]
schema.selected_items = (selectedIds || []).slice()(cópia defensiva) -
[x]
scheduleWidgetPreview(false)chamado sem condicional
-
-
[x] Item 4 — CodeMirror do widget consistente e sem duplicação
-
[x] Tema
tomorrow-night-bright, modohtmlmixedcomhtmlMode: true -
[x]
lineNumbers,lineWrapping,styleActiveLine,matchBrackets,indentUnit: 4,readOnly: true -
[x]
setSize('100%', 800)aplicado após instanciação -
[x] Antes de instanciar, recupera referência existente em
$textarea.next('.CodeMirror')[0].CodeMirror
-
-
[x] Item 5 — Regex backend sem arrobas
-
[x]
publisher-highlights.widget.php:preg_replace_callback('/\[\[item#X\]\]/', ...) -
[x]
publisher-highlights.php(extract_item_variables):'/\[\[item#X\]\]/' -
[x]
publisher-highlights.php(ajax_template_load):'/\[\[item#X\]\]/'
-
-
[x] Item 6 — Restrição de versionamento respeitada
-
[x] Nenhum
git commitougit pushexecutado
-
Evidência registrada em 2026-05-27
-
Arquivos alterados:
-
gestor/assets/interface/jquery-custom-dropdown.js(ignoreCallbacks + try/finally + syncSelection simplificada) -
gestor/modulos/publisher-highlights/publisher-highlights.js(slice defensivo em setSelectedIds + CodeMirror estilizado e dedup) -
gestor/modulos/publisher-highlights/publisher-highlights.widget.php(regex sem arrobas no loop de itens) -
gestor/modulos/publisher-highlights/publisher-highlights.php(regex sem arrobas em extract_item_variables e ajax_template_load)
-
-
Pendência: rodar
?️ Projects - Update => Corepara deploy JS+PHP atualizados; validar manualmente:-
Adicionar 2 itens manuais (Nota 2 → Nota 1): preview atualiza em cada clique mantendo ordem
-
Remover tag clicando no "x": preview atualiza removendo o item correto
-
Alternar template com itens selecionados: renderiza todos, não só o primeiro
-
Trocar de aba Editor HTML → Widget Code e voltar: não duplica CodeMirror; tema dark e altura 800px aplicados
-
Site público renderiza valores reais dos campos (titulo/url/data/customs) em vez de
[[item#X]]literais
-
BATCH-014 - Refatoração de Curadoria Manual, Autocomplete Ajax e Reordenação Drag and Drop (req-014)
-
[x] Item 1 — Remoção completa do componente antigo
-
[x] Arquivo
gestor/assets/interface/jquery-custom-dropdown.jsdeletado -
[x] Inclusões
gestor_pagina_javascript_incluir('biblioteca', [...'jquery-custom-dropdown'...])removidas das 3 funções (adicionar/editar/clonar) -
[x] JS sem referências a
manualItemsDropdown,ensureManualItemsDropdown,PublisherHighlightsCustomDropdownou#selected_items
-
-
[x] Item 2 — Dependência Sortable.js incluída
-
[x]
gestor_pagina_javascript_incluir('<script src="[REDACTED]></script>')emadicionar/editar/clonar
-
-
[x] Item 3 — Estrutura HTML do autocomplete nas 6 páginas
-
[x]
<select id="selected_items">substituído por#manual_search_input+#search-suggestions-dropdown+#selected-labels-container -
[x] pt-br com placeholders/avisos em português; en com placeholders/avisos em inglês
-
-
[x] Item 4 — Lógica JS do autocomplete (
publisher-highlights.js)-
[x] Hidratação inicial via
publisher-pages-fetchrespeitando a ordem deschema.selected_items -
[x] Busca incremental via
publisher-pages-searchcom debounce de 300ms -
[x] Tags Fomantic UI (label teal) com handle de arraste (
grip vertical) e botão remover (remove-tag-btn) -
[x] Itens já selecionados aparecem desabilitados nas sugestões
-
[x] Fechamento do dropdown ao clicar fora ou pressionar
Esc -
[x] Seleção/remoção/reordenação atualizam
schema.selected_itemse disparamscheduleWidgetPreview(false)
-
-
[x] Item 5 — Sincronização Sortable.js
-
[x]
new Sortable(#selected-labels-container, { handle: '.grip.vertical.icon', onEnd })relê a ordem física do DOM
-
-
[x] Item 6 — Serialização do formulário
-
[x] Submit e widget-preview enviam
fields_schemapor cópia (out), comselected_itemsvazio para regra não-manual e preservando o estado em memória
-
-
[x] Item 7 — CodeMirror da aba "Código do Widget" (
#hep-widget-code)-
[x] Case
'hep-widget'reintroduzido emcontentHighlightsTabHandler -
[x]
updateWidgetCodeTabcom retry quandoCodeMirrorindisponível e dedup via$textarea.next('.CodeMirror') -
[x] Instância única read-only, tema
tomorrow-night-bright, modohtmlmixed,setSize('100%', 800) -
[x] Envelopamento
<!-- widgets#publisher-highlights->render({"grupo_slug":"SLUG"}) < --> ... > -->com slug degestor.moduloRegistroIdou placeholder localizado
-
-
[x] Item 8 — Restrição de versionamento respeitada (nenhum
git commit/git push)
Evidência registrada em 2026-06-04
-
Validação executável (estática, sem ambiente Docker nesta rodada):
-
node --check gestor/modulos/publisher-highlights/publisher-highlights.js→JS_OK(sem erros de sintaxe) -
php -l gestor/modulos/publisher-highlights/publisher-highlights.php→No syntax errors detected -
Grep em
gestor/porjquery-custom-dropdowneid="selected_items"→ nenhum resultado (remoção completa confirmada) -
Grep no JS por
manualItemsDropdown|PublisherHighlightsCustomDropdown|ensureManualItemsDropdown→ apenas o comentário de contexto remanescente; nenhuma chamada viva
-
-
Arquivos alterados:
-
gestor/modulos/publisher-highlights/publisher-highlights.php(Sortable.js CDN no lugar do include antigo, 3 funções) -
gestor/modulos/publisher-highlights/publisher-highlights.js(autocomplete + tags + Sortable +updateWidgetCodeTab) -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/pages/publisher-highlights-{adicionar,editar,clonar}/*.html(6 páginas)
-
-
Arquivos removidos:
-
gestor/assets/interface/jquery-custom-dropdown.js
-
-
Decisão registrada: DEC-021 (supera DEC-018/019/020)
-
Pendência: rodar
?️ Projects - Update => Corepara recompilar páginas/JS e validar manualmente no Docker:-
digitar no campo de busca lista sugestões (Network mostra
publisher-pages-search); item já selecionado fica desabilitado -
clicar numa sugestão adiciona a tag ao final e atualiza o preview ao vivo
-
arrastar tags (handle) reordena e o preview reflete a nova ordem; abrir o registro novamente preserva a ordem salva
-
remover tag pelo "x" tira do preview o item correto
-
Esc/clique fora fecham a lista de sugestões -
aba "Código do Widget" exibe o CodeMirror dark read-only (800px) com o wrapper
widgets#publisher-highlights->render(...), sem duplicar instância ao alternar abas
-
BATCH-015 - Correções Residuais de Destaques e Inicialização do Módulo de Menus (req-015)
Parte 1 — Correções residuais do publisher-highlights
-
[x] Item 1.1 — Contagem da simulação segue o campo
#count-
[x]
html-editor-interface.js(publisherVariablesOrSimulation, alvopublisher-highlights) lê#countdo DOM -
[x]
count = Math.max(1, parseInt(countVal || schema.count || 4, 10))(reflete o input antes de salvar)
-
-
[x] Item 1.2 — Alinhamento do dropdown de autocomplete
-
[x]
margin: 0 !important;adicionado ao#search-suggestions-dropdownnas 6 páginas (adicionar/editar/clonar × pt-br/en)
-
-
[x] Item 1.3 — Visibilidade dinâmica do
#selected-labels-container-
[x]
toggleSelectedLabelsVisibility()criada empublisher-highlights.js -
[x] Invocada ao final de
renderSelectedLabels(), após adicionar tag e após remover tag
-
-
[x] Item 1.4 — Drag handle livre + filtro + cursores grab/grabbing
-
[x]
handle: '.grip.vertical.icon'removido; toda a tag é arrastável -
[x]
filter: '.remove-tag-btn'adicionado (clique no "x" não inicia arraste) -
[x] CSS grab/grabbing injetado no head via JS (
.drag-label,:active,.sortable-drag,.remove-tag-btn)
-
Parte 2 — Inicialização do módulo menus (ver DEC-022)
-
[x] 2.1/2.2 — Clonagem física
publisher-highlights/→menus/com renomeação de arquivos (menus.php,menus.json,menus.js,menus.widget.php) e diretórios/arquivos de páginas (menus-adicionar/editar/clonar); identificadores internos substituídos paramenus/id_menus -
[x] 2.3 — Registro em
gestor/db/data/ModulosData.json(pt-br + en, grupoadministracao-gestor, íconesitemap) -
[x] 2.4 — Migração Phinx
20260701110000_create_menus_table.php(tabelamenussempublisher_id, demais colunas análogas apublisher_highlights) -
[x] 2.5 — Limpeza preliminar
-
[x] HTML das 6 páginas: removidos publicador de origem (
#publisher_id), regra (#rule), quantidade (#count), ordenação (#order_by) e painel de mapeamento de variáveis; mantido o wrapper de autocomplete (agora buscando páginas do site) -
[x]
menus.widget.php: removidas rotinas de paginação dinâmica e herança de publisher; renderizador processa injeção simples a partir deselected_items(slugs depaginas) com[[item#label]]/[[item#url]]/[[item#slug]] -
[x]
menus.phpdesacoplado do publisher (sem validação/insert/update/select depublisher_id; AJAXpages-search/pages-fetchvarrempaginas)
-
-
[x] 6 templates próprios de menu criados (
pt-br+en); 6 templates de destaques removidos do clone
Evidência registrada em 2026-06-04
-
Validação executável (estática, sem ambiente Docker nesta rodada):
-
node --check gestor/modulos/publisher-highlights/publisher-highlights.js→PH_JS_OK -
node --check gestor/assets/interface/html-editor-interface.js→HEI_JS_OK -
node --check gestor/modulos/menus/menus.js→MENUS_JS_OK -
php -l gestor/modulos/menus/menus.php→No syntax errors detected -
php -l gestor/modulos/menus/menus.widget.php→No syntax errors detected -
php -l gestor/db/migrations/20260701110000_create_menus_table.php→No syntax errors detected -
JSON.parsedemenus.jsoneModulosData.json→OK -
Grep por
publisherna pastagestor/modulos/menus/→ apenas os.mdde ai_modes (reescritos para menus); sem acoplamento residual em PHP/JS/JSON/HTML
-
-
Arquivos alterados (Parte 1):
-
gestor/assets/interface/html-editor-interface.js -
gestor/modulos/publisher-highlights/publisher-highlights.js -
gestor/modulos/publisher-highlights/resources/{pt-br,en}/pages/publisher-highlights-{adicionar,editar,clonar}/*.html(6 páginas)
-
-
Arquivos criados/alterados (Parte 2):
-
gestor/modulos/menus/**(módulo completo: php/json/js/widget + 6 páginas + 12 templates + 2 ai_modes) -
gestor/db/migrations/20260701110000_create_menus_table.php -
gestor/db/data/ModulosData.json
-
-
Restrição respeitada: nenhum
git commit/git pushexecutado. -
Pendência (com o operador): rodar
?️ Projects - Update => Corepara compilar recursos domenus, calcular checksums (atualmente vazios), aplicar a migração no runtime de testes e registrar páginas/templates/módulo no banco. Depois, validar manualmente:-
menu administrativo "Menus do Site" aparece no grupo Administração do Gestor
-
adicionar/editar/clonar salvam
name+fields_schema+html/csssem erro depublisher_id -
autocomplete lista páginas do site; tags adicionam/removem/reordenam e o contêiner só aparece com ≥1 item
-
aba "Pré-Visualização" renderiza o menu com os itens reais; aba "Código do Widget" mostra o wrapper
widgets#menus->render(...) -
Parte 1: simulação dos destaques respeita o
#count; dropdown de autocomplete alinhado; grab no label inteiro
-
BATCH-016 - Hierarquia Multi-nível de Menus e Drag-and-Drop Estilo WordPress (req-016)
Contrato e decisão
-
[x] Contrato de
fields_schema.selected_itemsmigrado para árvore tipada (ver [DEC-023]); sem migração de banco (fields_schemajá éjson) -
[x] Retrocompatibilidade: lista de slugs (BATCH-015) é interpretada como itens
paginade nível raiz
Itens tipados e filtro de página
-
[x] 5 tipos de item disponíveis no construtor:
pagina,link-custom,cabecalho,link-action,separador -
[x] Campos condicionais por tipo (rótulo/URL/classes CSS) mostrados/ocultados conforme o tipo
-
[x] Filtro de tipo de página (rádios
pagina/sistema/ambos, defaultpagina) exibido apenas para o tipopagina -
[x] AJAX
pages-searchaplicaAND p.tipo='<valor>'parapagina/sistemae ignora o filtro emambos(defaultpagina) -
[x]
pages-search/pages-fetchretornamurl(caminho canônico) para hidratar nós de página
Editor de árvore (componente próprio)
-
[x] Componente de drag-and-drop de árvore bidimensional próprio: Pointer Events (JS vanilla) + visual Fomantic-UI, sem jQuery UI/nestedSortable/Sortable.js
-
[x] Dependência CDN do
Sortable.jsremovida das 3 funções demenus.php -
[x] Modelo interno flat-com-
depth; arraste vertical reordena e arraste horizontal indenta/desindenta (clamp emdepth(anterior)+1); placeholder mostra posição+recuo -
[x] Mover um item move também seus descendentes (preservando recuo relativo)
-
[x] Eventos de Pointer para clique expandir/colapsar nós do painel de edição
-
[x] Submit de Menus envia o JSON gerado por
buildTreea partir do modelo flat ordenado
Renderização e Simulação
-
[x]
menus.widget.phpsuporta<!-- item-parent < -->e[[item#children]]para renderização recursiva -
[x] Nós do tipo
paginaresolvem rótulo/caminho dinamicamente do banco de dados na renderização -
[x] Simulação em
html-editor-interface.jsexpande recursivamente a árvore estática mockada comitem-parent -
[x] Variáveis expostas documentadas e aba Código do Widget atualizada
Evidência registrada em 2026-06-04
-
Validação executável (estática, sem ambiente Docker nesta rodada):
-
node --check gestor/modulos/menus/menus.js→TREE_JS_OK -
node --check gestor/assets/interface/html-editor-interface.js→HEI_JS_OK -
php -l gestor/modulos/menus/menus.php→No syntax errors detected -
php -l gestor/modulos/menus/menus.widget.php→No syntax errors detected
-
-
Arquivos alterados:
-
gestor/modulos/menus/menus.php(removeu Sortable.js e passou a injetar árvore) -
gestor/modulos/menus/menus.js(editor de drag-and-drop Pointer bidimensional, alternador de campos e serialização buildTree) -
gestor/modulos/menus/menus.widget.php(renderização recursiva com DFS, mapeamento do tipo de nó, resolução canônica do banco) -
gestor/assets/interface/html-editor-interface.js(simulação de sub-árvores mockadas) -
gestor/modulos/menus/resources/{pt-br,en}/pages/menus-{adicionar,editar,clonar}/*.html(6 páginas: novos inputs e skeletons) -
gestor/modulos/menus/resources/{pt-br,en}/templates/menus-horizontal-navbar/*.htmle demais templates (12 templates com suporte a item-parent e children)
-
-
Pendência (com o operador): rodar
?️ Projects - Update => Corepara recompilar templates/páginas e registrar as alterações. Depois, validar manualmente:-
abrir o CRUD de menus e adicionar um item
-
arrastar e indentar itens criando uma árvore de 3 níveis de profundidade
-
salvar e verificar que reabrir o registro reconstrói a árvore corretamente
-
aba de visualização renderiza os submenus aninhados
-
aba Código do Widget mostra a árvore e as variáveis
[[item#X]]e[[item#children]]no CodeMirror
-
BATCH-017 - Ajustes e Correções no Módulo de Menus (req-017)
-
[x] Item 1 — Aba de variáveis e simulação reintegradas no alvo
menus-
[x]
html-editor.phpganhacase 'menus'carregando controles de simulação -
[x] Componente
html-editor-menus-simulation(pt-br/en) criado com árvore de teste de dois níveis de profundidade -
[x]
html-editor-interface.jsimplementa simulação de árvore JS espelhando o DFS do widget -
[x] Fallback
MENUS_SIM_FALLBACKinjetado localmente se o componente não for carregado do banco
-
-
[x] Item 2 — Seletor de tipo de item JS lê via Fomantic
-
[x]
menus.js: alternador lê viadropdown('get value')corrigindo a seleção do tipo de item
-
-
[x] Item 3 — Placeholder do DnD com altura e indicações direcionais
-
[x]
menus.js: placeholder exibe "Solte o item aqui" / "Drop item here" com setas ← / →
-
-
[x] Item 4 — Hover de submenus no navbar corrigido via geometria CSS
-
[x]
menus-dropdownemenus-horizontal-navbar(pt-br/en): gapsmt-1/ml-1removidos, colando submenus
-
-
[x] Item 5 — Restrição de versionamento respeitada (nenhum
git commit/git push)
Evidência registrada em 2026-06-04
-
Validação estática executada:
-
node --check gestor/modulos/menus/menus.js→JS_OK -
php -l gestor/modulos/menus/menus.php→No syntax errors detected
-
-
Arquivos alterados:
-
gestor/bibliotecas/html-editor.php(case 'menus' mapeado + template_map carregado) -
gestor/assets/interface/html-editor-interface.js(simulação robusta de árvore com fallback local) -
gestor/modulos/menus/menus.js(fix dropdown + placeholder customizado) -
gestor/modulos/menus/resources/{pt-br,en}/templates/menus-{dropdown,horizontal-navbar}/*.html(gaps removidos)
-
-
Arquivos criados:
-
gestor/resources/{pt-br,en}/components/html-editor-menus-simulation/html-editor-menus-simulation.html
-
-
Decisão registrada: DEC-024 (estende DEC-022/DEC-023; reutiliza a infraestrutura de variáveis
[[item#X]]do html-editor) -
Restrição respeitada: nenhum
git commit/git pushexecutado. -
Pendência (com o operador): rodar
atualizacao-dados-recursos.php/?️ Projects - Update => Corepara registrar o novo componente emComponentesData.json, recalcular checksums dos templates alterados e aplicar no ambiente de testes. Depois, validar manualmente:-
editar um menu → aba "Editor HTML" → botões "Variáveis"/"Simular": "Simular" renderiza o template com a árvore mockada (com submenus); "Variáveis" lista
[[item#label/url/slug/css_classes/children]] -
construtor de itens: trocar o "Tipo de Item" para link-custom/cabeçalho/link-action/separador exibe os inputs corretos e oculta a busca de páginas
-
arrastar item: a caixa de drop tem altura de item e mostra "Solte o item aqui" com setas ← →
-
preview/site com template
menus-dropdownoumenus-horizontal-navbar: o submenu permanece aberto ao mover o mouse do item pai para a lista flutuante
-