FIX: images aren't lightboxed anymore (partially reverts 646c6eb7cd)

This commit is contained in:
Régis Hanol 2017-10-18 23:54:36 +02:00
parent c838f43a75
commit cbdfc85466
2 changed files with 16 additions and 35 deletions

View File

@ -183,7 +183,7 @@ class CookedPostProcessor
# we can *always* crawl our own images # we can *always* crawl our own images
return unless SiteSetting.crawl_images? || Discourse.store.has_been_uploaded?(url) return unless SiteSetting.crawl_images? || Discourse.store.has_been_uploaded?(url)
@size_cache[url] ||= FastImage.size(absolute_url) @size_cache[url] = FastImage.size(absolute_url)
rescue Zlib::BufError # FastImage.size raises BufError for some gifs rescue Zlib::BufError # FastImage.size raises BufError for some gifs
end end
@ -199,30 +199,21 @@ class CookedPostProcessor
def convert_to_link!(img) def convert_to_link!(img)
src = img["src"] src = img["src"]
return unless src.present? return if src.blank?
width, height = img["width"].to_i, img["height"].to_i width, height = img["width"].to_i, img["height"].to_i
upload = Upload.get_from_url(src) # TODO: even though get_size is cached, a better solution is to store
# both original and "cropped" dimensions on the uploads table
original_width, original_height = original_width, original_height = (get_size(src) || [0, 0]).map(&:to_i)
if upload
[upload.width, upload.height]
else
get_size(src)
end
# can't reach the image... # can't reach the image...
if original_width.nil? || if original_width == 0 || original_height == 0
original_height.nil? ||
original_width == 0 ||
original_height == 0
Rails.logger.info "Can't reach '#{src}' to get its dimension." Rails.logger.info "Can't reach '#{src}' to get its dimension."
return return
end end
return if original_width.to_i <= width && original_height.to_i <= height return if original_width <= width && original_height <= height
return if original_width.to_i <= SiteSetting.max_image_width && original_height.to_i <= SiteSetting.max_image_height return if original_width <= SiteSetting.max_image_width && original_height <= SiteSetting.max_image_height
return if is_a_hyperlink?(img) return if is_a_hyperlink?(img)
crop = false crop = false
@ -233,7 +224,7 @@ class CookedPostProcessor
img["height"] = height img["height"] = height
end end
if upload if upload = Upload.get_from_url(src)
upload.create_thumbnail!(width, height, crop) upload.create_thumbnail!(width, height, crop)
end end

View File

@ -90,9 +90,7 @@ describe CookedPostProcessor do
shared_examples "leave dimensions alone" do shared_examples "leave dimensions alone" do
it "doesn't use them" do it "doesn't use them" do
# adds the width from the image sizes provided when no dimension is provided
expect(cpp.html).to match(/src="http:\/\/foo.bar\/image.png" width="" height=""/) expect(cpp.html).to match(/src="http:\/\/foo.bar\/image.png" width="" height=""/)
# adds the width from the image sizes provided
expect(cpp.html).to match(/src="http:\/\/domain.com\/picture.jpg" width="50" height="42"/) expect(cpp.html).to match(/src="http:\/\/domain.com\/picture.jpg" width="50" height="42"/)
expect(cpp).to be_dirty expect(cpp).to be_dirty
end end
@ -108,10 +106,7 @@ describe CookedPostProcessor do
let(:image_sizes) { { "http://foo.bar/image.png" => { "width" => 111, "height" => 222 } } } let(:image_sizes) { { "http://foo.bar/image.png" => { "width" => 111, "height" => 222 } } }
it "uses them" do it "uses them" do
# adds the width from the image sizes provided when no dimension is provided
expect(cpp.html).to match(/src="http:\/\/foo.bar\/image.png" width="111" height="222"/) expect(cpp.html).to match(/src="http:\/\/foo.bar\/image.png" width="111" height="222"/)
# adds the width from the image sizes provided
expect(cpp.html).to match(/src="http:\/\/domain.com\/picture.jpg" width="50" height="42"/) expect(cpp.html).to match(/src="http:\/\/domain.com\/picture.jpg" width="50" height="42"/)
expect(cpp).to be_dirty expect(cpp).to be_dirty
end end
@ -150,7 +145,7 @@ describe CookedPostProcessor do
context "with large images" do context "with large images" do
let(:upload) { Fabricate(:upload, width: 1750, height: 2000) } let(:upload) { Fabricate(:upload) }
let(:post) { Fabricate(:post_with_large_image) } let(:post) { Fabricate(:post_with_large_image) }
let(:cpp) { CookedPostProcessor.new(post) } let(:cpp) { CookedPostProcessor.new(post) }
@ -159,9 +154,7 @@ describe CookedPostProcessor do
SiteSetting.create_thumbnails = true SiteSetting.create_thumbnails = true
Upload.expects(:get_from_url).returns(upload) Upload.expects(:get_from_url).returns(upload)
FastImage.stubs(:size).returns([1750, 2000]) FastImage.expects(:size).returns([1750, 2000])
# hmmm this should be done in a cleaner way
OptimizedImage.expects(:resize).returns(true) OptimizedImage.expects(:resize).returns(true)
FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0) FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0)
@ -179,7 +172,7 @@ describe CookedPostProcessor do
context "with large images when using subfolders" do context "with large images when using subfolders" do
let(:upload) { Fabricate(:upload, width: 1750, height: 2000) } let(:upload) { Fabricate(:upload) }
let(:post) { Fabricate(:post_with_large_image_on_subfolder) } let(:post) { Fabricate(:post_with_large_image_on_subfolder) }
let(:cpp) { CookedPostProcessor.new(post) } let(:cpp) { CookedPostProcessor.new(post) }
let(:base_url) { "http://test.localhost/subfolder" } let(:base_url) { "http://test.localhost/subfolder" }
@ -192,9 +185,7 @@ describe CookedPostProcessor do
Discourse.stubs(:base_uri).returns(base_uri) Discourse.stubs(:base_uri).returns(base_uri)
Upload.expects(:get_from_url).returns(upload) Upload.expects(:get_from_url).returns(upload)
FastImage.stubs(:size).returns([1750, 2000]) FastImage.expects(:size).returns([1750, 2000])
# hmmm this should be done in a cleaner way
OptimizedImage.expects(:resize).returns(true) OptimizedImage.expects(:resize).returns(true)
FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0) FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0)
@ -220,7 +211,7 @@ describe CookedPostProcessor do
context "with title" do context "with title" do
let(:upload) { Fabricate(:upload, width: 1750, height: 2000) } let(:upload) { Fabricate(:upload) }
let(:post) { Fabricate(:post_with_large_image_and_title) } let(:post) { Fabricate(:post_with_large_image_and_title) }
let(:cpp) { CookedPostProcessor.new(post) } let(:cpp) { CookedPostProcessor.new(post) }
@ -229,10 +220,9 @@ describe CookedPostProcessor do
SiteSetting.create_thumbnails = true SiteSetting.create_thumbnails = true
Upload.expects(:get_from_url).returns(upload) Upload.expects(:get_from_url).returns(upload)
FastImage.stubs(:size).returns([1750, 2000]) FastImage.expects(:size).returns([1750, 2000])
# hmmm this should be done in a cleaner way
OptimizedImage.expects(:resize).returns(true) OptimizedImage.expects(:resize).returns(true)
FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0) FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0)
end end