Vamos ver como esse link fica nesta instância do Discourse:
Quando colei isso, o onebox na prévia mostrou brevemente a imagem com a proporção correta. Um ou dois segundos depois, ela ficou achatada.
Portanto, o que quer que esteja acontecendo não se limita à nossa instância do Discourse. Acho que podemos precisar especificar as dimensões da imagem nas tags OG, mas não pensei que isso fosse necessário.
Então… algum progresso nisso? Ainda está acontecendo. Se houver alguma solução alternativa, me avise. Se estivermos fazendo algo incorretamente, me avise.
Relatório de status: isso ainda acontece. Quando eu colo um link em um novo tópico, inicialmente a imagem associada parece boa na pré-visualização. Mas assim que eu pressiono Enter ou a barra de espaço, a imagem fica achatada. Eu verifiquei os passos de solução de problemas do onebox novamente e revisei mais uma vez todas as configurações substituídas, sem sucesso. Isso é loucura.
Essa CSS poderia ser considerada subótima ou algum tipo de compromisso. Estou com pressa, mas talvez ela esteja forçando 16:9 no momento. Não é ótimo para logotipos quadrados
Será que a altura poderia ser definida como automática? (Embora isso possa apresentar desafios para imagens em formato retrato)
A qual CSS você está se referindo? Quer dizer, você pode estar certo, mas estou tentando determinar se é algo que posso corrigir em nossa instância do Discourse, ou se é algo no código-fonte do Discourse.
Acho que o bug aqui é que, se o tipo for “rich”, e não estivermos capturando toda a apresentação do payload html do oembed, devemos pular a adição de dimensões, pois não estamos interessados nesses dados.
Isso corrige:
diff --git a/lib/onebox/engine/standard_embed.rb b/lib/onebox/engine/standard_embed.rb
index e3175d6247..fc8c300d81 100644
--- a/lib/onebox/engine/standard_embed.rb
+++ b/lib/onebox/engine/standard_embed.rb
@@ -159,8 +159,9 @@ module Onebox
@json_ld ||= Onebox::JsonLd.new(html_doc)
end
- def set_from_normalizer_data(normalizer)
+ def set_from_normalizer_data(normalizer, skip_dimensions: false)
normalizer.data.each do |k, _|
+ next if skip_dimensions && k.in?(%i[width height])
v = normalizer.public_send(k)
@raw[k] ||= v unless v.nil?
end
@@ -179,7 +180,8 @@ module Onebox
def set_oembed_data_on_raw
oembed = get_oembed
- set_from_normalizer_data(oembed)
+ skip_dimensions = oembed.data[:type] == "rich"
+ set_from_normalizer_data(oembed, skip_dimensions:)
end
def set_json_ld_data_on_raw
No entanto, não tenho certeza de quais outros efeitos colaterais isso teria, sinalizando a equipe de experiência do membro, que dará uma olhada nisso no próximo mês.
Estou relutante em simplesmente adicionar meu patch, pois há muitas camadas e complexidade aqui, alguém precisa garantir que possamos adicionar o patch de uma maneira muito segura e testada.
Isso é pri-médio, pois o impacto desse bug é bastante amplo, dado que o wp-json o expõe.
Legal! Esses dados oembed parecem ser a pista definitiva. Curiosamente, a documentação do Wordpress (software) fala sobre oembed apenas em termos de sites Wordpress incorporando conteúdo de outros sites, não o contrário. No entanto, a documentação do wordpress.com (serviço) diz “Cada postagem, página, anexo e vídeo VideoPress hospedado no WordPress.com suporta o formato oEmbed através da nossa API pública oEmbed.” Portanto, é seguro presumir que o software Wordpress faz isso por padrão.
Revisei todas as configurações do Wordpress e não consegui encontrar nada relacionado a oembed, então parece que quaisquer suposições feitas pelo Wordpress estão embutidas no código.
A API oembed do Wordpress também explica por que não há referência às dimensões 600/338 em nenhum lugar no código-fonte da página, o que eu achei desconcertante anteriormente.
Concordo que qualquer correção possível para isso no Discourse pode ter muitos efeitos colaterais (possivelmente indesejados) e precisa ser testada antes de ser lançada.
Além disso, nem tenho certeza se este é um problema do Discourse. A dimensão incorreta ‘338’ vem do Wordpress. Parece-me que deveria haver uma maneira no Wordpress de substituir padrões relacionados a oembed como este. Planejo procurar um plugin do Wordpress que permita mais controle sobre oembed.