Résoudre les styles finaux dans les notifications par email

Au moins, le client de messagerie Web de posteo.de affiche les couleurs avec la première valeur donnée dans une définition de style CSS, ce qui donne des boutons illisibles dans les notifications :

image

au lieu de

Cette image montre une barre bleue rectangulaire avec du texte blanc qui semble être des instructions en allemand sur la façon de répondre à un e-mail, avec les mots allemands « Rufe das Thema auf oder antworte auf diese E-Mail, um zu antworten. » (Légendé par l'IA)

Actuellement, le style correspondant est

font-weight: normal;; text-decoration: none; font-weight: bold; color: #006699;; background-color: #2F70AC; color: #FFFFFF; border-top: 4px solid #2F70AC; border-right: 6px solid #2F70AC; border-bottom: 4px solid #2F70AC; border-left: 6px solid #2F70AC; display: inline-block; font-weight: bold;

S’il est modifié pour inclure uniquement les dernières définitions

font-weight: normal; text-decoration: none; font-weight: bold; background-color: #2F70AC; color: #FFFFFF; border-top: 4px solid #2F70AC; border-right: 6px solid #2F70AC; border-bottom: 4px solid #2F70AC; border-left: 6px solid #2F70AC; display: inline-block; font-weight: bold;

on obtient le comportement souhaité.

Comme il n’y a aucun avantage à envoyer des styles ultérieurement écrasés, les problèmes d’affichage avec des visualiseurs d’e-mails bogués pourraient être résolus en n’envoyant que les définitions CSS finales.

2 « J'aime »

Il y a une implémentation dans

1 « J'aime »

Si vous avez envie de faire une pull request, je serai heureux de la fusionner :+1:

Cela ne résout pas ce problème mais avoir des styles dupliqués est inutile et sujet aux erreurs de toute façon.

Je ferais quelques légères modifications à la fonction deduplicate_style, principalement pour m’assurer que la key et les values sont présentes.

def deduplicate_style(style)
  styles = {}

  style
    .split(";")
    .select(&:present?)
    .map { _1.split(":", 2).map(&:strip) }
    .each { |k, v| styles[k] = v if k.present? && v.present? }

  styles.map { |k, v| "#{k}:#{v}" }.join(";")
end
2 « J'aime »

Merci, je viens de le fusionner :git_merged:

1 « J'aime »

Ce sujet a été automatiquement fermé après 2 jours. Les nouvelles réponses ne sont plus autorisées.