Escopo do Lote
Este lote implementa as operações de Copiar, Colar e Embrulhar (Wrap) na barra de ferramentas do editor visual no iframe (html-editor.js).
Progresso por Slice
O lote foi quebrado nos seguintes slices funcionais:
| Slice | Escopo | Status | Validação |
|---|---|---|---|
| 1 | UI do Toolbar: Adicionar botões e ícones de Copiar, Colar e Embrulhar (html-editor.js) |
complete | node --check OK |
| 2 | Copiar/Colar: Lógica do Clipboard e inserção como irmão (html-editor.js) |
complete | node --check OK |
| 3 | Teclado: Listeners de Ctrl+C e Ctrl+V no iframe e encaminhamento do pai (html-editor.js) |
complete | node --check OK |
| 4 | Embrulhar Elemento: Popup de tags, substituição do DOM e foco preservado (html-editor.js) |
complete | node --check OK |
Checklist de Implementação
1. UI do Toolbar (html-editor.js)
-
[x] Adicionar os botões HTML na barra flutuante
#html-editor-floating-toolbar:-
Botão Copiar (
.he-tb-copy, íconecopy). -
Botão Colar (
.he-tb-paste, íconepaste). -
Botão Embrulhar (
.he-tb-wrap, íconeboxoufile archive).
-
-
[x] Ocultar ou desabilitar o botão Colar por padrão, tornando-o visível/ativo somente quando
this.clipboardElementcontiver um clone válido. -
[x] Injetar os estilos para o popup/menu de tags de embrulho
.he-wrap-menueminjectStyles().
2. Lógica de Copiar/Colar (html-editor.js)
-
[x] Criar a propriedade
this.clipboardElement = nullno construtor. -
[x] Criar o método
copySelected():-
Clona profundamente o elemento selecionado:
this.clipboardElement = this.selectedElement.cloneNode(true). -
Atualiza a visibilidade/estado do botão Colar na toolbar.
-
-
[x] Criar o método
pasteSelected():-
Se não houver
this.clipboardElement, abortar. -
Clonar o elemento do clipboard:
const clone = this.clipboardElement.cloneNode(true). -
Inserir o clone como irmão adjacente do elemento selecionado atual:
this.selectedElement.parentNode.insertBefore(clone, this.selectedElement.nextSibling). -
Selecionar o clone e disparar
afterDomMutation().
-
3. Atalhos de Teclado & postMessage (html-editor.js & html-editor-visual-controls.js)
-
[x] Adicionar listeners de teclado para
Ctrl + CeCtrl + Vno iframe (html-editor.js):-
Capturar atalhos quando não houver inputs focados.
-
Chamar
copySelected()oupasteSelected().
-
-
[x] Sincronizar atalhos na janela pai (
html-editor-visual-controls.js) para detectarCtrl + CeCtrl + Ve enviá-los viapostMessageao iframe. -
[x] Tratar as mensagens
c2f-he:copyec2f-he:pastena escuta de mensagens do iframe.
4. Lógica de Embrulhar Elemento (html-editor.js)
-
[x] No clique do botão Embrulhar, abrir um menu de tags (
div,section,a,p,article,aside) próximo à toolbar. -
[x] Ao clicar em uma tag:
-
Criar o novo contêiner:
const wrapper = document.createElement(tag). -
Substituir o elemento selecionado pelo wrapper:
el.parentNode.replaceChild(wrapper, el). -
Anexar o elemento selecionado original como filho do wrapper:
wrapper.appendChild(el). -
Manter a seleção focada no elemento original (
el). -
Chamar
afterDomMutation().
-
Evidência de Validação (BATCH-036) — 2026-06-13
-
Validação estática:
node --checkOK emgestor/assets/interface/html-editor.jsehtml-editor-visual-controls.js. -
Arquivos alterados:
-
gestor/assets/interface/html-editor.js: -
Toolbar: novos botões
.he-tb-copy(íconecopy),.he-tb-paste(íconepaste, oculto até haver clipboard) e.he-tb-wrap(íconebox); o botão Duplicar passou a usar o íconeclonepara diferenciar de Copiar. Novo popup#html-editor-wrap-menu(tagsdiv/section/a/p/article/aside) + estilos.he-wrap-menu. -
Clipboard interno
this.clipboardElement; métodoscopySelected(),pasteSelected(),updatePasteButton()(mostra/oculta Colar e reposiciona a toolbar à direita),toggleWrapMenu()/openWrapMenu()/closeWrapMenu()ewrapSelected(tag)(replaceChild + appendChild, mantendo a seleção no elemento original). -
Atalhos no iframe:
Ctrl/Cmd+C(copia, só quando não há seleção de texto ativa — preserva a cópia nativa) eCtrl/Cmd+V(cola); mensagensc2f-he:copy/c2f-he:pasteno bus;#html-editor-wrap-menuregistrado emisEditorOwned/extractUserHtml; fechamento do menu ao clicar fora, emselectElement/clearSelection/hideChrome/Esc. -
gestor/assets/interface/html-editor-visual-controls.js: açõesACT.COPY/ACT.PASTEe atalhosCtrl+C/Ctrl+Vna janela pai (com guarda de input focado e seleção de texto), encaminhados porpostMessageao iframe.
-
-
Decisão: DEC-050.
-
Pendência (operador): deploy
?️ Projects - Update => Core+ validação runtime:-
Copiar (botão/Ctrl+C) habilita o botão Colar; Colar (botão/Ctrl+V) insere o clone como irmão inferior do alvo, repetível em vários alvos.
-
Embrulhar abre o popup de tags; escolher uma envolve o elemento e mantém a seleção no original (breadcrumb passa a mostrar o novo contêiner pai).
-