main ← small-lovely-cat:main
opened 06:02AM - 27 Oct 25 UTC
The new experimental `PhotoSwipeLightbox` (siteSettings.experimental_lightbox) c… ontain bugs when the image link exists in `Discourse Solved` or the upload component in `admin/config/logo`. The root cause is that `PhotoSwipeLightbox` need width and height from the already-loaded image, while `Discourse Solved` and the upload component don't have these attributes.
Without these attributes, the image will be stretched to fill the browser window, causing distortion, as shown in the figure attached.
This commit add a preload mechanism for images without dimensions to get their dimensions, so that they can be displayed normally.
Before fix:
`upload component`
<img width="1600" height="801" alt="image" src="https://github.com/user-attachments/assets/ad1eb80d-a348-412a-a3d3-75701c97f6a4" />
`Discourse Solved`
<img width="1007" height="484" alt="image" src="https://github.com/user-attachments/assets/20d227c7-2539-463a-903d-4a83d8782460" />
<img width="1919" height="914" alt="image" src="https://github.com/user-attachments/assets/d0c8ef5f-05a6-48dc-b507-94b796b095b9" />
After fix:
`upload component`
<img width="1603" height="758" alt="image" src="https://github.com/user-attachments/assets/03302997-9a43-425d-a7df-c218961a377a" />
`Discourse Solved`
<img width="1603" height="760" alt="image" src="https://github.com/user-attachments/assets/ced4355a-8818-4ef5-bce2-cb632165e3a9" />
O novo PhotoSwipeLightbox experimental (siteSettings.experimental_lightbox) contém bugs quando o link da imagem existe em Discourse Solved ou no componente de upload em admin/config/logo. A causa raiz é que PhotoSwipeLightbox precisa de largura e altura da imagem já carregada, enquanto Discourse Solved e o componente de upload não possuem esses atributos.
Sem esses atributos, a imagem será esticada para preencher a janela do navegador, causando distorção, como mostrado na figura anexa.
Este commit adiciona um mecanismo de pré-carregamento para imagens sem dimensões para obter suas dimensões, para que possam ser exibidas normalmente.
2 curtidas
davidb
(David B)
Novembro 11, 2025, 9:30am
2
Obrigado por relatar isso e compartilhar uma correção.
Adicionei alguns comentários/sugestões no PR, mas, no geral, acho que precisamos de um fallback como este para capturar os casos extremos.
OK, obrigado, vou analisar os comentários quando estiver livre.
context "quando faltam atributos de dados" do
it "pré-carrega imagens e define dimensões" do
upload_1.update(width: 400, height: 300)
post.update(
cooked:
"<p><a href=\"#{upload_1.url}\" class=\"lightbox\" data-download-href=\"#{upload_1.url}\">[image]</a></p>",
)
topic_page.visit_topic(topic)
lightbox_link = find("#post_1 a.lightbox")
expect(lightbox_link["data-target-width"]).to be_nil
expect(lightbox_link["data-target-height"]).to be_nil
lightbox_link.click
expect(lightbox).to be_visible
expect(lightbox_link["data-target-width"]).to eq(upload_1.width.to_s)
expect(lightbox_link["data-target-height"]).to eq(upload_1.height.to_s)
end
end
Estou adicionando isso ao lightbox_spec.rb como um teste unitário para aquelas imagens sem dimensões, então isso parece estar correto?
Além disso, fiz algumas alterações na lógica de discriminação para lidar com aqueles que possuem metadados, mas os metadados falham em conter as informações de tamanho. (ou seja, o componente de upload)
const missingMetaData = !item
.querySelector(".meta")
?.textContent.trim()
.split(/x|×/)
.every((v) => v && +v > 0);