fix(webmail): acertos de interface e mover mensagens entre pastas

Cc/Cco. Os dois rótulos do compositor eram o último texto em inglês
que restava, e "Bcc" tem nome próprio em português - quem não conhece
a abreviatura inglesa não adivinha o que o campo faz.

Larguras. A barra lateral tinha 244px fixos e nela não cabia "Console
de administração", que transbordava no telemóvel e no computador: o
botão passa a mostrar um rótulo curto e guarda o nome completo no
tooltip. O endereço da conta usava break-words e partia-se a meio do
domínio, deixando um "br" sozinho na linha de baixo; passa a truncar
com o valor inteiro no tooltip.

A lista tinha 404px fixos e o leitor 760px centrados, portanto num ecrã
largo os assuntos eram espremidos numa coluna estreita enquanto o
leitor ficava entre duas margens enormes. Ambos crescem agora com a
janela. O assunto ganha overflow-wrap: os Message-ID dos relatórios do
Google são uma única "palavra" sem espaços, mais longa que a coluna, e
sem sítio onde quebrar saíam da linha.

Imagens remotas. A escolha era reposta sempre que uma mensagem era
aberta, por isso a mesma newsletter tinha de ser desbloqueada em cada
leitura. A decisão passa a ser lembrada por remetente, com um segundo
botão para a retirar. Bloqueado continua a ser o que acontece por
omissão: uma imagem remota é um aviso de leitura que o remetente não
pediu licença para receber.

Assinatura. Era escrita num textarea - texto simples com quebras de
linha reais - e injetada no compositor com innerHTML, onde uma quebra
de linha é espaço em branco: todas desapareciam. Passa a ser um campo
rico, com negrito, itálico, links e imagens, guardado como HTML e
sanitizado nos dois sentidos, já que este valor é injetado como
marcação na origem do webmail. Assinaturas guardadas pelo campo antigo
continuam a funcionar: as suas quebras de linha são convertidas.

Mover entre pastas. Faltava a única ação corrente que o leitor não
tinha: arquivar uma mensagem para fora da caixa de entrada era
impossível. Enviados e Rascunhos nunca são destino - descrevem como a
mensagem veio a existir, não onde o leitor a arrumou - mas sair deles é
permitido. Pastas criadas pelo utilizador, que não têm papel
special-use, são destino como qualquer outra.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Opus 5 committed 2026-08-22 13:18:08 -03:00
1 parent ac0521cb9b
commit f179cb1f27
20 files changed
+911 -37

No files matched your search

+15 -3
View File
@@ -90,7 +90,8 @@
"unknownSni": "Unknown SNI requests",
"unlockAccount": "Unlock",
"verifyIntro": "Resolves every expected record against public resolvers and reports each one.",
"watcherHealthy": "Certificate watcher"
"watcherHealthy": "Certificate watcher",
"openAdminShort": "Admin"
},
"auth": {
"adminLoginTitle": "Admin console",
@@ -198,7 +199,13 @@
"undoSend": "Sending in {seconds}s",
"undoSendAction": "Undo",
"unreadCount": "{count} unread",
"unreadFilter": "Unread"
"unreadFilter": "Unread",
"ccLabel": "Cc",
"bccLabel": "Bcc",
"hideImages": "Hide images",
"alwaysFromSender": "Always from this sender",
"forgetSender": "Stop trusting sender",
"moveTo": "Move to"
},
"settings": {
"actionDiscard": "Discard",
@@ -324,6 +331,11 @@
"toggleMenu": "Toggle menu",
"totalEvaluated": "Messages evaluated",
"twoFactorSection": "Two-factor authentication",
"watching": "Watching"
"watching": "Watching",
"bold": "Bold",
"italic": "Italic",
"underline": "Underline",
"insertLink": "Link",
"insertImage": "Image"
}
}
+15 -3
View File
@@ -90,7 +90,8 @@
"unknownSni": "Solicitudes SNI desconocidas",
"unlockAccount": "Desbloquear",
"verifyIntro": "Resuelve cada registro esperado en resolutores públicos e informa uno por uno.",
"watcherHealthy": "Monitor de certificado"
"watcherHealthy": "Monitor de certificado",
"openAdminShort": "Admin"
},
"auth": {
"adminLoginTitle": "Consola de administración",
@@ -198,7 +199,13 @@
"undoSend": "Enviando en {seconds}s",
"undoSendAction": "Deshacer",
"unreadCount": "{count} sin leer",
"unreadFilter": "Sin leer"
"unreadFilter": "Sin leer",
"ccLabel": "Cc",
"bccLabel": "Cco",
"hideImages": "Ocultar imágenes",
"alwaysFromSender": "Siempre de este remitente",
"forgetSender": "Dejar de confiar",
"moveTo": "Mover a"
},
"settings": {
"actionDiscard": "Descartar",
@@ -324,6 +331,11 @@
"toggleMenu": "Alternar menú",
"totalEvaluated": "Mensajes evaluados",
"twoFactorSection": "Verificación en dos pasos",
"watching": "Vigilando"
"watching": "Vigilando",
"bold": "Negrita",
"italic": "Cursiva",
"underline": "Subrayado",
"insertLink": "Enlace",
"insertImage": "Imagen"
}
}
+15 -3
View File
@@ -90,7 +90,8 @@
"unknownSni": "Requisições SNI desconhecidas",
"unlockAccount": "Desbloquear",
"verifyIntro": "Resolve cada registro esperado em servidores DNS públicos e relata um a um.",
"watcherHealthy": "Monitor de certificado"
"watcherHealthy": "Monitor de certificado",
"openAdminShort": "Admin"
},
"auth": {
"adminLoginTitle": "Console de administração",
@@ -198,7 +199,13 @@
"undoSend": "Enviando em {seconds}s",
"undoSendAction": "Desfazer",
"unreadCount": "{count} não lidas",
"unreadFilter": "Não lidas"
"unreadFilter": "Não lidas",
"ccLabel": "Cc",
"bccLabel": "Cco",
"hideImages": "Ocultar imagens",
"alwaysFromSender": "Sempre deste remetente",
"forgetSender": "Deixar de confiar",
"moveTo": "Mover para"
},
"settings": {
"actionDiscard": "Descartar",
@@ -324,6 +331,11 @@
"toggleMenu": "Alternar menu",
"totalEvaluated": "Mensagens avaliadas",
"twoFactorSection": "Verificação em duas etapas",
"watching": "Monitorando"
"watching": "Monitorando",
"bold": "Negrito",
"italic": "Itálico",
"underline": "Sublinhado",
"insertLink": "Link",
"insertImage": "Imagem"
}
}