fix: botao mostrar/ocultar do log nao abria (elemento interativo dentro de summary nao propaga toggle nativo)

This commit is contained in:
Gustavo
2026-08-20 11:48:54 -03:00
parent cf742b4341
commit d2135bce5d
2 changed files with 23 additions and 0 deletions
+9
View File
@@ -86,6 +86,15 @@
botao.textContent = aberto ? "Ocultar" : "Mostrar"; botao.textContent = aberto ? "Ocultar" : "Mostrar";
botao.setAttribute("aria-expanded", aberto ? "true" : "false"); botao.setAttribute("aria-expanded", aberto ? "true" : "false");
}; };
// Um <button> dentro de <summary> é ele mesmo um elemento interativo:
// o navegador não propaga o clique para o toggle nativo do <details>
// quando o clique começa em outro controle interativo. Por isso o
// toggle precisa ser feito manualmente aqui.
botao.addEventListener("click", function (evento) {
evento.preventDefault();
secao.open = !secao.open;
atualizar();
});
secao.addEventListener("toggle", atualizar); secao.addEventListener("toggle", atualizar);
atualizar(); atualizar();
}); });
+14
View File
@@ -118,3 +118,17 @@ def test_pagina_log_secoes_comecam_fechadas(monkeypatch):
assert texto.count('<details class="secao-log">') == 2 assert texto.count('<details class="secao-log">') == 2
assert "<details class=\"secao-log\" open>" not in texto assert "<details class=\"secao-log\" open>" not in texto
assert "<details class='secao-log' open>" not in texto assert "<details class='secao-log' open>" not in texto
def test_pagina_log_botao_toggle_tem_handler_de_clique_proprio(monkeypatch):
"""Regressão: um <button> dentro de <summary> não propaga o clique para
o toggle nativo do <details> — precisa de um listener de clique
explícito que abre/fecha a seção manualmente (ver log.html)."""
monkeypatch.setattr(router_log.db_log, "listar", lambda limite=20: [])
monkeypatch.setattr(router_log.n8n_client, "listar_envios", lambda limite=50: [])
monkeypatch.setattr(router_log.n8n_client, "configurado", lambda: False)
resposta = client.get("/log")
assert resposta.status_code == 200
assert 'botao.addEventListener("click"' in resposta.text
assert "secao.open = !secao.open" in resposta.text