diff --git a/pandora/document/views.py b/pandora/document/views.py index 6657f92cc..8ce0f35b5 100644 --- a/pandora/document/views.py +++ b/pandora/document/views.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- +from glob import glob +import mimetypes import os import re -from glob import glob import unicodedata import ox @@ -379,11 +380,13 @@ actions.register(sortDocuments, cache=False) def file(request, id, name=None): document = get_document_or_404_json(request, id) accept = request.headers.get("Accept") + mime_type = mimetypes.guess_type(document.file.path)[0] + mime_type = 'image/%s' % document.extension if accept and 'image/' in accept and document.extension in ( - 'webp', 'heif', 'heic', 'avif' - ) and document.extension not in accept: + 'webp', 'heif', 'heic', 'avif', 'tiff' + ) and mime_type not in accept: image_size = max(document.width, document.height) - return HttpFileResponse(document.thumbnail(image_size)) + return HttpFileResponse(document.thumbnail(image_size, accept=accept)) return HttpFileResponse(document.file.path) def thumbnail(request, id, size=256, page=None): diff --git a/static/js/uploadDocumentDialog.js b/static/js/uploadDocumentDialog.js index 50eaeb0a4..7b80a241e 100644 --- a/static/js/uploadDocumentDialog.js +++ b/static/js/uploadDocumentDialog.js @@ -8,8 +8,6 @@ pandora.ui.uploadDocumentDialog = function(options, callback) { existingFiles = [], uploadFiles = [], - supportedExtensions = ['gif', 'jpg', 'jpeg', 'pdf', 'png', 'webp', 'heic', 'heif', 'avif'], - filename, ids = [], @@ -72,7 +70,7 @@ pandora.ui.uploadDocumentDialog = function(options, callback) { }); if (!Ox.every(extensions, function(extension) { - return Ox.contains(supportedExtensions, extension) + return Ox.contains(pandora.documentExtensions, extension) })) { return errorDialog( Ox._('Supported file types are GIF, JPG, PNG and PDF.') diff --git a/static/js/utils.js b/static/js/utils.js index 29e0d75c3..ea28e18fa 100644 --- a/static/js/utils.js +++ b/static/js/utils.js @@ -420,13 +420,28 @@ pandora.createLinks = function($element) { }); }; +pandora.imageExtensions = [ + 'avif', + 'gif', + 'heic', + 'heif', + 'jpeg', + 'jpg', + 'png', + 'tiff', + 'webp' +]; + +pandora.documentExtensions = [ + 'pdf', /* 'epub', 'txt', */ +].concat(pandora.imageExtensions); + pandora.uploadDroppedFiles = function(files) { - var documentExtensions = ['pdf', /* 'epub', 'txt', */ 'png', 'gif', 'jpg', 'jpeg', 'webp', 'heic', 'heif', 'avif']; files = Ox.map(files, function(file) { return file }); if (files.every(function(file) { var extension = file.name.split('.').pop().toLowerCase() - return Ox.contains(documentExtensions, extension) + return Ox.contains(pandora.documentExtensions, extension) })) { pandora.ui.uploadDocumentDialog({ files: files @@ -2132,9 +2147,7 @@ pandora.getSpan = function(state, val, callback) { } else { state.span = val; } - } else if (Ox.contains([ - 'gif', 'gif', 'jpg', 'png', 'webp', 'heic', 'heif', 'avif' - ], extension)) { + } else if (Ox.contains(pandora.imageExtensions, extension)) { values = val.split(','); if (values.length == 4) { state.span = values.map(function(number, index) {