实验性 PhotoSwipeLightbox 组件出现意外缩放,破坏了原始图像的比例

新的实验性 PhotoSwipeLightbox(siteSettings.experimental_lightbox)在图片链接存在于 Discourse Solvedadmin/config/logo 中的上传组件时存在错误。根本原因是 PhotoSwipeLightbox 需要从已加载的图片中获取宽度和高度,而 Discourse Solved 和上传组件没有这些属性。

没有这些属性,图片将被拉伸以填满浏览器窗口,导致失真,如图所示。

此提交添加了一种预加载机制,用于获取没有尺寸的图片的尺寸,以便它们可以正常显示。

2 个赞

感谢您报告此问题并分享修复方案。

我在 PR 中添加了一些评论/建议,但总的来说,我认为我们需要一个像这样的后备方案来处理边缘情况。

好的,谢谢。我有空时会相应地在评论中加入见解。

  context "当缺少数据属性时" do
    it "预加载图片并设置尺寸" 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

我将此添加到 lightbox_spec.rb 中,作为针对无尺寸图片的单元测试,这样看起来可以吗?

此外,我还对判别逻辑进行了一些修改,以处理那些具有元数据但元数据未能包含大小信息的(例如,上传组件)。

const missingMetaData = !item
    .querySelector(".meta")
    ?.textContent.trim()
    .split(/x|×/)
    .every((v) => v && +v > 0);