diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c2b0a55..8bab964 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,8 +15,6 @@ jobs: matrix: include: # Django 2.2 - - tox-env: "py36-dj22" - python-version: "3.6" - tox-env: "py37-dj22" python-version: "3.7" - tox-env: "py38-dj22" @@ -24,8 +22,6 @@ jobs: - tox-env: "py39-dj22" python-version: "3.9" # Django 3.0 - - tox-env: "py36-dj30" - python-version: "3.6" - tox-env: "py37-dj30" python-version: "3.7" - tox-env: "py38-dj30" @@ -33,8 +29,6 @@ jobs: - tox-env: "py39-dj30" python-version: "3.9" # Django 3.1 - - tox-env: "py36-dj31" - python-version: "3.6" - tox-env: "py37-dj31" python-version: "3.7" - tox-env: "py38-dj31" @@ -42,8 +36,6 @@ jobs: - tox-env: "py39-dj31" python-version: "3.9" # Django 3.2 - - tox-env: "py36-dj32" - python-version: "3.6" - tox-env: "py37-dj32" python-version: "3.7" - tox-env: "py38-dj32" @@ -52,6 +44,8 @@ jobs: python-version: "3.9" - tox-env: "py310-dj32" python-version: "3.10" + - tox-env: "py311-dj32" + python-version: "3.11" # Django 4.0 - tox-env: "py38-dj40" python-version: "3.8" @@ -59,6 +53,8 @@ jobs: python-version: "3.9" - tox-env: "py310-dj40" python-version: "3.10" + - tox-env: "py311-dj40" + python-version: "3.11" steps: - uses: actions/checkout@v2 diff --git a/filebrowser_safe/fields.py b/filebrowser_safe/fields.py index 67becea..a6d293a 100644 --- a/filebrowser_safe/fields.py +++ b/filebrowser_safe/fields.py @@ -7,6 +7,7 @@ from django.db.models.fields.files import FileDescriptor from django.forms.widgets import Input from django.template.loader import render_to_string +from django.templatetags.static import static from django.utils.encoding import smart_str from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ @@ -20,7 +21,7 @@ class FileBrowseWidget(Input): input_type = "text" class Media: - js = (os.path.join(fb_settings.URL_FILEBROWSER_MEDIA, "js/AddFileBrowser.js"),) + js = (static("filebrowser/js/AddFileBrowser.js"),) def __init__(self, attrs=None): self.directory = attrs.get("directory", "") @@ -44,7 +45,7 @@ def render(self, name, value, attrs=None, renderer=None): default_storage.makedirs(fullpath) final_attrs = dict(type=self.input_type, name=name, **attrs) final_attrs["search_icon"] = ( - fb_settings.URL_FILEBROWSER_MEDIA + "img/filebrowser_icon_show.gif" + static("filebrowser/img/filebrowser_icon_show.gif") ) final_attrs["directory"] = directory final_attrs["extensions"] = self.extensions diff --git a/filebrowser_safe/functions.py b/filebrowser_safe/functions.py index 783299a..0c5a763 100644 --- a/filebrowser_safe/functions.py +++ b/filebrowser_safe/functions.py @@ -174,7 +174,6 @@ def get_settings_var(): settings_var["MEDIA_URL"] = fb_settings.MEDIA_URL settings_var["DIRECTORY"] = get_directory() # FileBrowser - settings_var["URL_FILEBROWSER_MEDIA"] = fb_settings.URL_FILEBROWSER_MEDIA settings_var["PATH_FILEBROWSER_MEDIA"] = fb_settings.PATH_FILEBROWSER_MEDIA # TinyMCE settings_var["URL_TINYMCE"] = fb_settings.URL_TINYMCE diff --git a/filebrowser_safe/settings.py b/filebrowser_safe/settings.py index ababcfa..f0f5eb4 100644 --- a/filebrowser_safe/settings.py +++ b/filebrowser_safe/settings.py @@ -20,12 +20,6 @@ # DO NOT USE A SLASH AT THE BEGINNING, DO NOT FORGET THE TRAILING SLASH AT THE END. DIRECTORY = getattr(settings, "FILEBROWSER_DIRECTORY", "uploads/") -# The URL/PATH to your filebrowser media-files. -URL_FILEBROWSER_MEDIA = getattr( - settings, - "FILEBROWSER_URL_FILEBROWSER_MEDIA", - "%sfilebrowser/" % settings.STATIC_URL, -) PATH_FILEBROWSER_MEDIA = getattr( settings, "FILEBROWSER_PATH_FILEBROWSER_MEDIA", diff --git a/filebrowser_safe/templates/filebrowser/include/filelisting.html b/filebrowser_safe/templates/filebrowser/include/filelisting.html index 7e73aad..8a83571 100644 --- a/filebrowser_safe/templates/filebrowser/include/filelisting.html +++ b/filebrowser_safe/templates/filebrowser/include/filelisting.html @@ -17,7 +17,7 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} @@ -31,7 +31,7 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} @@ -45,7 +45,7 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} @@ -59,15 +59,14 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} {% endif %} - - + {% if results_var.images_total %} @@ -86,7 +85,7 @@ {% if query.pop != '4' %} - + {% endif %} @@ -98,10 +97,10 @@ {% if file.filetype != 'Folder' %} -
{% csrf_token %}
+
{% csrf_token %}
{% else %} -
{% csrf_token %}
+
{% csrf_token %}
{% endif %} diff --git a/filebrowser_safe/templates/filebrowser/index.html b/filebrowser_safe/templates/filebrowser/index.html index 4d064ad..e3bb31b 100644 --- a/filebrowser_safe/templates/filebrowser/index.html +++ b/filebrowser_safe/templates/filebrowser/index.html @@ -7,7 +7,7 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} @@ -15,21 +15,21 @@ {{ block.super }} {% if query.pop == '1' %} - + {% endif %} {% if query.pop == '2' %} - + {% if query.mce_rdomain %}{% endif %} {% endif %} {% if query.pop == '3' %} - + {% endif %} {% if query.pop == '5' %} - + {% endif %} @@ -43,7 +43,7 @@ {% block rtl_styles %} {{ block.super }} - + {% endblock %} diff --git a/filebrowser_safe/templates/filebrowser/makedir.html b/filebrowser_safe/templates/filebrowser/makedir.html index 88056d8..ee4c1b6 100644 --- a/filebrowser_safe/templates/filebrowser/makedir.html +++ b/filebrowser_safe/templates/filebrowser/makedir.html @@ -7,12 +7,12 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} {% block rtl_styles %} {{ block.super }} - + {% endblock %} diff --git a/filebrowser_safe/templates/filebrowser/rename.html b/filebrowser_safe/templates/filebrowser/rename.html index a902b86..bceaecf 100644 --- a/filebrowser_safe/templates/filebrowser/rename.html +++ b/filebrowser_safe/templates/filebrowser/rename.html @@ -7,12 +7,12 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} {% block rtl_styles %} {{ block.super }} - + {% endblock %} diff --git a/filebrowser_safe/templates/filebrowser/upload.html b/filebrowser_safe/templates/filebrowser/upload.html index 4b13b5f..eb5e5ef 100644 --- a/filebrowser_safe/templates/filebrowser/upload.html +++ b/filebrowser_safe/templates/filebrowser/upload.html @@ -7,18 +7,18 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} {% block rtl_styles %} {{ block.super }} - + {% endblock %} {% block extrahead %} {{ block.super }} - + {% endblock extrahead %} diff --git a/filebrowser_safe/templatetags/fb_tags.py b/filebrowser_safe/templatetags/fb_tags.py index 9d478ee..3e21158 100644 --- a/filebrowser_safe/templatetags/fb_tags.py +++ b/filebrowser_safe/templatetags/fb_tags.py @@ -1,6 +1,7 @@ import warnings from django import template +from django.templatetags.static import static from urllib.parse import quote @@ -184,3 +185,7 @@ def allowed_extensions_list(separator=","): register.simple_tag(allowed_extensions_list) + +@register.simple_tag +def get_filetype_icon(filetype): + return static(f'filebrowser/img/filebrowser_type_{filetype.lower()}.gif') \ No newline at end of file diff --git a/filebrowser_safe/views.py b/filebrowser_safe/views.py index f202242..1664254 100644 --- a/filebrowser_safe/views.py +++ b/filebrowser_safe/views.py @@ -2,7 +2,7 @@ import re from json import dumps -from django import forms +from django import forms, get_version from django.conf import settings as django_settings from django.contrib import messages from django.contrib.admin.views.decorators import staff_member_required @@ -39,20 +39,23 @@ try: from mezzanine.utils.html import escape except ImportError: - escape = lambda s: s # noqa - + def escape(s): return s # noqa +if get_version() > '4': + DEFAULT_FILE_STORAGE = django_settings.STORAGES['default']['BACKEND'] +else: + DEFAULT_FILE_STORAGE = django_settings.DEFAULT_FILE_STORAGE # Add some required methods to FileSystemStorage -storage_class_name = django_settings.DEFAULT_FILE_STORAGE.split(".")[-1] +storage_class_name = DEFAULT_FILE_STORAGE.split(".")[-1] mixin_class_name = "filebrowser_safe.storage.%sMixin" % storage_class_name # Workaround for django-s3-folder-storage -if django_settings.DEFAULT_FILE_STORAGE == "s3_folder_storage.s3.DefaultStorage": +if DEFAULT_FILE_STORAGE == "s3_folder_storage.s3.DefaultStorage": mixin_class_name = "filebrowser_safe.storage.S3BotoStorageMixin" try: mixin_class = import_string(mixin_class_name) - storage_class = import_string(django_settings.DEFAULT_FILE_STORAGE) + storage_class = import_string(DEFAULT_FILE_STORAGE) except ImportError: pass else: diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..242e366 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,5 @@ +# pyproject.toml +[build-system] +# XXX: If your project needs other packages to build properly, add them to this list. +requires = ["setuptools >= 42.0.0"] +build-backend = "setuptools.build_meta" diff --git a/setup.cfg b/setup.cfg index fa27b12..95d45df 100644 --- a/setup.cfg +++ b/setup.cfg @@ -13,14 +13,14 @@ license_file = LICENSE classifiers = Programming Language :: Python Programming Language :: Python :: 3 - Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 [options] -python_requires = >=3.6 +python_requires = >=3.7 packages = find: include_package_data = true