Esta especificação detalha ajustes refinados sobre a entrega do autocomplete e CodeMirror no módulo publisher-highlights (req-014), e inicia a criação do novo módulo menus a partir de uma cópia limpa do módulo de destaques.
1. Correções Residuais de Destaques (publisher-highlights)
1.1 Bug de Contagem de Cards na Simulação
-
Bug: O botão de simulação no editor HTML visual (
publisherVariablesOrSimulationno JS do editor) usa a quantidade real de publicações para clonar os cards no preview simulado. Se houver poucas publicações no banco, a simulação não preenche a quantidade de cards definida. Ele deve seguir a quantidade máxima especificada pelo usuário. -
Ajuste:
-
No arquivo
gestor/assets/interface/html-editor-interface.js[MODIFY], dentro da funçãopublisherVariablesOrSimulation(), na verificação dealvo === 'publisher-highlights': -
Ler o valor diretamente do campo
#countno DOM (ex:var countVal = $('#count').val()) caso exista. -
Definir a contagem como
Math.max(1, parseInt(countVal || schema.count || 4, 10)). Isso garante que a simulação reflita instantaneamente o número de itens desejado no input de contagem, mesmo antes de salvar a página.
-
1.2 Alinhamento do Dropdown de Autocomplete
-
Ajuste:
-
A caixa de sugestões
#search-suggestions-dropdownaparece deslocada para baixo devido às margens padrões herdadas da classe.ui.vertical.menudo Fomantic UI. -
Sobrescrever a margem definindo
margin: 0 !important;no estilo do elemento nos 6 templates de página (adicionar,editareclonarempt-breen):<div id="search-suggestions-dropdown" class="ui vertical menu" style="display: none; position: absolute; top: 100%; left: 0; width: 100%; z-index: 1000; max-height: 250px; overflow-y: auto; box-shadow: 0 4px 6px rgba(0,0,0,0.15); margin: 0 !important;">
-
1.3 Visibilidade Dinâmica do Contêiner de Tags
-
Ajuste:
-
O elemento
#selected-labels-container(área cinza de tags selecionadas) fica visível em tela mesmo quando está vazio. Ele deve aparecer apenas quando houver pelo menos um item selecionado. -
No arquivo
publisher-highlights.js[MODIFY], criar ou adaptar uma função de verificação:function toggleSelectedLabelsVisibility() { var $container = $('#selected-labels-container'); if (schema.selected_items && schema.selected_items.length > 0) { $container.show(); } else { $container.hide(); } } -
Invocar esta função nos seguintes momentos:
-
Ao final de
renderSelectedLabels(). -
Logo após adicionar uma nova tag no callback de clique de uma sugestão (
#search-suggestions-dropdown .item). -
Logo após remover uma tag no callback de clique do botão de excluir (
.remove-tag-btn).
-
-
1.4 Controle do Drag Handle e Estilo do Cursor (grab/grabbing)
-
Ajuste:
-
Atualmente, a reordenação está restrita apenas ao ícone de arrastar (
handle: '.grip.vertical.icon'), mas o cursor de mão aberta (grab) aparece no label inteiro. Se o usuário arrasta pelo texto da tag, nada acontece. -
Lógica Sortable: Em
publisher-highlights.js, remover a restrição dehandlenas opções do Sortable para que toda a área da tag seja arrastável. -
Filtro de Exclusão: Adicionar a opção
filter: '.remove-tag-btn'para impedir que a ação de arrastar seja acionada ao tentar clicar no botão "x" de exclusão. -
Cursores CSS: Adicionar uma tag
<style>nos templates ou injetar programaticamente no head via JS os seguintes estilos para aplicar o cursorgrabegrabbingde forma intuitiva durante a interação física com o mouse:.drag-label { cursor: grab !important; } .drag-label .grip.vertical.icon { cursor: grab !important; } .drag-label:active, .drag-label:active * { cursor: grabbing !important; } .sortable-drag { cursor: grabbing !important; } .remove-tag-btn { cursor: pointer !important; }
-
2. Inicialização do Módulo de Menus (menus)
2.1 Clonagem da Estrutura Física do Módulo
-
Ação: Copiar toda a pasta
gestor/modulos/publisher-highlights/paragestor/modulos/menus/[NEW]. -
Renomeação Física:
-
Renomear todos os arquivos da nova pasta substituindo
publisher-highlightspormenus: -
menus.php -
menus.json -
menus.js -
menus.widget.php -
Renomear os diretórios e arquivos de templates em
resources/{pt-br,en}/pages/: -
menus-adicionar/menus-adicionar.html -
menus-editar/menus-editar.html -
menus-clonar/menus-clonar.html
-
2.2 Substituição de Identificadores Internos
-
Substituir todas as ocorrências de strings contendo
publisher-highlightsoupublisher_highlightspor suas versões correspondentesmenusoumenusnos arquivos clonados PHP, JS, JSON e HTML.-
Exemplos:
id_publisher_highlights->id_menus,PublisherHighlights->Menus,publisher_highlights->menus.
-
-
Mapear o ID do módulo no novo
menus.jsone no cabeçalho demenus.phppara'menus'.
2.3 Registro de Módulo no Banco (ModulosData.json)
-
Local:
gestor/db/data/ModulosData.json[MODIFY] -
Ação: Cadastrar o novo módulo
menus(entradas parapt-breen) sob o grupoadministracao-gestor(mesmo grupo de destaques e publicador páginas).-
ID do módulo:
"menus". -
Ícone sugerido para o menu administrativo:
"sitemap"ou"bars". -
Nomes sugeridos: pt-br: "Menus do Site" / en: "Site Menus".
-
2.4 Nova Tabela no Banco de Dados
-
Migração Phinx: Criar arquivo de migração em
gestor/db/migrations/[NEW] (ex:YYYYMMDDHHMMSS_create_menus_table.php) para criar a tabelamenuscom o ID da chave primária definido comoid_menus. -
Colunas:
-
A tabela deve ser análoga a
publisher_highlights, contendo:id_usuarios,name,id(slug do menu),fields_schema(JSON),html(MEDIUMTEXT para o template do menu),css(TEXT),plugin,language,status(default 'A'),versao(default 1),data_criacao,data_modificacao,user_modified,system_updated. -
ATENÇÃO: Como os menus do site são livres de publicadores (não têm relação direta com canais de posts), a coluna
publisher_idnão deve existir na tabelamenus.
-
2.5 Limpeza Preliminar de Campos Específicos
-
HTML/Templates de Páginas:
-
Nas telas de montagem do menu (
adicionar,editar,clonar), remover o dropdown de "Publicador de Origem" (#publisher_id), a regra de alimentação automática (#rule), a quantidade máxima (#count) e a ordenação (#order_by). -
Remover a seção do painel de Mapeamento de Variáveis (
#linked-fields-list,#available-fields-liste afins), pois menus não mapeiam variáveis dinâmicas de publicadores. -
Manter o wrapper de autocomplete manual que serve como base para selecionar os itens de menu. (Nos lotes futuros expandiremos este autocomplete para montar a árvore de menus multi-nível).
-
-
Processamento de Widget (menus.widget.php):
-
Limpar as rotinas de paginação dinâmica e herança de publisher, adaptando o renderizador para processar a injeção simples do widget de menu baseado no template e nos dados curados de
selected_itemsou itens de menu criados.
-
3. Restrições e Execução
-
Sincronização de Recursos: Ao final da cópia e migrações, o executor deve executar a tarefa de sincronização de recursos
php ./gestor/controladores/agents/arquitetura/atualizacao-dados-recursos.phppara calcular checksums, gerar as páginas traduzidas no banco em runtime de testes e validar que os metadados do módulo de menus estão integrados com o Conn2Flow. -
ATENÇÃO: NÃO realizar commits (
git commit) ou envios (git push) de forma automática. Todas as modificações locais de código e documentação devem ser mantidas locais no workspace de trabalho para posterior avaliação e aprovação pelo Engenheiro Chefe Humano.