Feature #38168 ยป webp.patch
app/helpers/application_helper.rb | ||
---|---|---|
944 | 944 |
attachments += obj.attachments if obj.respond_to?(:attachments) |
945 | 945 |
end |
946 | 946 |
if attachments.present? |
947 |
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m| |
|
947 |
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png|webp))"(\s+alt="([^"]*)")?/i) do |m|
|
|
948 | 948 |
filename, ext, alt, alttext = $1, $2, $3, $4 |
949 | 949 |
# search for the picture in attachments |
950 | 950 |
if found = Attachment.latest_attach(attachments, CGI.unescape(filename)) |
app/models/attachment.rb | ||
---|---|---|
220 | 220 |
end |
221 | 221 | |
222 | 222 |
def image? |
223 |
!!(self.filename =~ /\.(bmp|gif|jpg|jpe|jpeg|png)$/i) |
|
223 |
!!(self.filename =~ /\.(bmp|gif|jpg|jpe|jpeg|png|webp)$/i)
|
|
224 | 224 |
end |
225 | 225 | |
226 | 226 |
def thumbnailable? |
lib/redmine/mime_type.rb | ||
---|---|---|
44 | 44 |
'image/jpeg' => 'jpg,jpeg,jpe', |
45 | 45 |
'image/png' => 'png', |
46 | 46 |
'image/tiff' => 'tiff,tif', |
47 |
'image/webp' => 'webp', |
|
47 | 48 |
'image/x-ms-bmp' => 'bmp', |
48 | 49 |
'application/javascript' => 'js', |
49 | 50 |
'application/pdf' => 'pdf', |
lib/redmine/thumbnail.rb | ||
---|---|---|
29 | 29 |
('gswin64c' if Redmine::Platform.mswin?) || |
30 | 30 |
'gs' |
31 | 31 |
).freeze |
32 |
ALLOWED_TYPES = %w(image/bmp image/gif image/jpeg image/png application/pdf) |
|
32 |
ALLOWED_TYPES = %w(image/bmp image/gif image/jpeg image/png image/webp application/pdf)
|
|
33 | 33 | |
34 | 34 |
# Generates a thumbnail for the source image to target |
35 | 35 |
def self.generate(source, target, size, is_pdf = false) |
test/fixtures/attachments.yml | ||
---|---|---|
309 | 309 |
filename: ecookbook-gantt.pdf |
310 | 310 |
author_id: 2 |
311 | 311 |
description: Gantt chart as of May 11 |
312 |
attachments_024: |
|
313 |
created_on: 2023-01-11 08:46:41 +00:00 |
|
314 |
content_type: image/webp |
|
315 |
container_type: Issue |
|
316 |
container_id: 1 |
|
317 |
downloads: 0 |
|
318 |
disk_filename: 230111173947_logo.webp |
|
319 |
disk_directory: "2023/01" |
|
320 |
digest: 9219249de57e601a0bb65845304bc44bb1961ea1c2b8ace28c38fa40c3c741e5 |
|
321 |
id: 24 |
|
322 |
filesize: 74974 |
|
323 |
filename: logo.webp |
|
324 |
author_id: 2 |
|
325 |
description: WebP image |
test/helpers/application_helper_test.rb | ||
---|---|---|
184 | 184 |
'Inline image: <img src="/attachments/download/3/logo.gif" title="This is a logo" alt="This is a logo" loading="lazy" />', |
185 | 185 |
'Inline image: !logo.GIF!' => |
186 | 186 |
'Inline image: <img src="/attachments/download/3/logo.gif" title="This is a logo" alt="This is a logo" loading="lazy" />', |
187 |
'Inline WebP image: !logo.webp!' => |
|
188 |
'Inline WebP image: <img src="/attachments/download/24/logo.webp" title="WebP image" alt="WebP image" loading="lazy" />', |
|
187 | 189 |
'No match: !ogo.gif!' => 'No match: <img src="ogo.gif" alt="" />', |
188 | 190 |
'No match: !ogo.GIF!' => 'No match: <img src="ogo.GIF" alt="" />', |
189 | 191 |
# link image |
test/unit/attachment_test.rb | ||
---|---|---|
520 | 520 |
def test_thumbnailable_should_be_true_for_images |
521 | 521 |
skip unless convert_installed? |
522 | 522 |
assert_equal true, Attachment.new(:filename => 'test.jpg').thumbnailable? |
523 |
assert_equal true, Attachment.new(:filename => 'test.webp').thumbnailable? |
|
523 | 524 |
end |
524 | 525 | |
525 | 526 |
def test_thumbnailable_should_be_false_for_images_if_convert_is_unavailable |
test/unit/lib/redmine/mime_type_test.rb | ||
---|---|---|
77 | 77 |
end |
78 | 78 |
end |
79 | 79 | |
80 |
def test_by_type |
|
81 |
image_types = Redmine::MimeType.by_type('image') |
|
82 |
assert_includes image_types, 'image/png' |
|
83 |
assert_includes image_types, 'image/webp' |
|
84 |
end |
|
85 | ||
80 | 86 |
def test_should_default_to_mime_type_gem |
81 | 87 |
assert !Redmine::MimeType::EXTENSIONS.key?("zip") |
82 | 88 |
assert_equal "application/zip", Redmine::MimeType.of("file.zip") |