mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 15:25:35 +08:00
FEATURE: Add support for AVIF images (#21680)
This commit is contained in:
parent
f3f841a018
commit
baa5389a23
|
@ -196,7 +196,7 @@ export function authorizedExtensions(staff, siteSettings) {
|
||||||
|
|
||||||
function authorizedImagesExtensions(staff, siteSettings) {
|
function authorizedImagesExtensions(staff, siteSettings) {
|
||||||
return authorizesAllExtensions(staff, siteSettings)
|
return authorizesAllExtensions(staff, siteSettings)
|
||||||
? "png, jpg, jpeg, gif, svg, ico, heic, heif, webp"
|
? "png, jpg, jpeg, gif, svg, ico, heic, heif, webp, avif"
|
||||||
: imagesExtensions(staff, siteSettings).join(", ");
|
: imagesExtensions(staff, siteSettings).join(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +230,7 @@ export function authorizesOneOrMoreImageExtensions(staff, siteSettings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isImage(path) {
|
export function isImage(path) {
|
||||||
return /\.(png|webp|jpe?g|gif|svg|ico|heic|heif)$/i.test(path);
|
return /\.(png|webp|jpe?g|gif|svg|ico|heic|heif|avif)$/i.test(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isVideo(path) {
|
export function isVideo(path) {
|
||||||
|
|
|
@ -236,14 +236,16 @@ module("Unit | Utility | uploads", function (hooks) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("isImage", function (assert) {
|
test("isImage", function (assert) {
|
||||||
["png", "webp", "jpg", "jpeg", "gif", "ico"].forEach((extension) => {
|
["png", "webp", "jpg", "jpeg", "gif", "ico", "avif"].forEach(
|
||||||
let image = "image." + extension;
|
(extension) => {
|
||||||
assert.ok(isImage(image), image + " is recognized as an image");
|
let image = "image." + extension;
|
||||||
assert.ok(
|
assert.ok(isImage(image), image + " is recognized as an image");
|
||||||
isImage("http://foo.bar/path/to/" + image),
|
assert.ok(
|
||||||
image + " is recognized as an image"
|
isImage("http://foo.bar/path/to/" + image),
|
||||||
);
|
image + " is recognized as an image"
|
||||||
});
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
assert.notOk(isImage("file.txt"));
|
assert.notOk(isImage("file.txt"));
|
||||||
assert.notOk(isImage("http://foo.bar/path/to/file.txt"));
|
assert.notOk(isImage("http://foo.bar/path/to/file.txt"));
|
||||||
assert.notOk(isImage(""));
|
assert.notOk(isImage(""));
|
||||||
|
|
|
@ -175,7 +175,7 @@ class OptimizedImage < ActiveRecord::Base
|
||||||
paths.each { |path| raise Discourse::InvalidAccess unless safe_path?(path) }
|
paths.each { |path| raise Discourse::InvalidAccess unless safe_path?(path) }
|
||||||
end
|
end
|
||||||
|
|
||||||
IM_DECODERS ||= /\A(jpe?g|png|ico|gif|webp)\z/i
|
IM_DECODERS ||= /\A(jpe?g|png|ico|gif|webp|avif)\z/i
|
||||||
|
|
||||||
def self.prepend_decoder!(path, ext_path = nil, opts = nil)
|
def self.prepend_decoder!(path, ext_path = nil, opts = nil)
|
||||||
opts ||= {}
|
opts ||= {}
|
||||||
|
|
|
@ -203,7 +203,7 @@ server {
|
||||||
try_files $uri =404;
|
try_files $uri =404;
|
||||||
}
|
}
|
||||||
# this allows us to bypass rails
|
# this allows us to bypass rails
|
||||||
location ~* \.(gif|png|jpg|jpeg|bmp|tif|tiff|ico|webp)$ {
|
location ~* \.(gif|png|jpg|jpeg|bmp|tif|tiff|ico||avif)$ {
|
||||||
add_header Access-Control-Allow-Origin *;
|
add_header Access-Control-Allow-Origin *;
|
||||||
try_files $uri =404;
|
try_files $uri =404;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1352,12 +1352,12 @@ files:
|
||||||
default: 50000
|
default: 50000
|
||||||
max: 1024000
|
max: 1024000
|
||||||
theme_authorized_extensions:
|
theme_authorized_extensions:
|
||||||
default: "wasm|jpg|jpeg|png|woff|woff2|svg|eot|ttf|otf|gif|webp|js"
|
default: "wasm|jpg|jpeg|png|woff|woff2|svg|eot|ttf|otf|gif|webp|avif|js"
|
||||||
type: list
|
type: list
|
||||||
list_type: compact
|
list_type: compact
|
||||||
authorized_extensions:
|
authorized_extensions:
|
||||||
client: true
|
client: true
|
||||||
default: "jpg|jpeg|png|gif|heic|heif|webp"
|
default: "jpg|jpeg|png|gif|heic|heif|webp|avif"
|
||||||
refresh: true
|
refresh: true
|
||||||
type: list
|
type: list
|
||||||
list_type: compact
|
list_type: compact
|
||||||
|
|
|
@ -158,7 +158,7 @@ class FileHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.supported_images
|
def self.supported_images
|
||||||
@@supported_images ||= Set.new %w[jpg jpeg png gif svg ico webp]
|
@@supported_images ||= Set.new %w[jpg jpeg png gif svg ico webp avif]
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.inline_images
|
def self.inline_images
|
||||||
|
|
|
@ -662,7 +662,7 @@ class UploadCreator
|
||||||
if is_animated != nil
|
if is_animated != nil
|
||||||
# FastImage will return nil if it cannot determine if animated
|
# FastImage will return nil if it cannot determine if animated
|
||||||
is_animated
|
is_animated
|
||||||
elsif type == "gif" || type == "webp"
|
elsif %w[gif webp avif].include?(type)
|
||||||
# Only GIFs, WEBPs and a few other unsupported image types can be animated
|
# Only GIFs, WEBPs and a few other unsupported image types can be animated
|
||||||
OptimizedImage.ensure_safe_paths!(@file.path)
|
OptimizedImage.ensure_safe_paths!(@file.path)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user