Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 4 additions & 8 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,27 @@ 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"
python-version: "3.8"
- 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"
python-version: "3.8"
- 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"
python-version: "3.8"
- 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"
Expand All @@ -52,13 +44,17 @@ 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"
- tox-env: "py39-dj40"
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
Expand Down
5 changes: 3 additions & 2 deletions filebrowser_safe/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 _
Expand All @@ -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", "")
Expand All @@ -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
Expand Down
1 change: 0 additions & 1 deletion filebrowser_safe/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 0 additions & 6 deletions filebrowser_safe/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
17 changes: 8 additions & 9 deletions filebrowser_safe/templates/filebrowser/include/filelisting.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
{% if selectable %}
<a href="javascript://" onclick="FileSubmit('{{ file.path }}', '{{ file.url }}', '{{ settings_var.MEDIA_URL }}{% if file.filetype == 'Image' %}{% thumbnail file.path 60 60 %}{% else %}{{ file.path }}{% endif %}', '{{ file.filetype }}');" class="fb_selectlink" title="{% trans 'Select' %}"></a>
{% else %}
<img src="{{ settings_var.URL_FILEBROWSER_MEDIA }}img/filebrowser_icon_select_disabled.gif" width="23" height="17" />
<img src="{% static 'filebrowser/img/filebrowser_icon_select_disabled.gif' %}" width="23" height="17" />
{% endif %}
</td>
{% endif %}
Expand All @@ -31,7 +31,7 @@
{% if selectable %}
<a href="javascript:FileBrowserDialogue.fileSubmit('{{ file.url|escapejs }}');" class="fb_selectlink" title="{% trans 'Select File' %}"></a>
{% else %}
<img src="{{ settings_var.URL_FILEBROWSER_MEDIA }}img/filebrowser_icon_select_disabled.gif" width="23" height="17" />
<img src="{% static 'filebrowser/img/filebrowser_icon_select_disabled.gif' %}" width="23" height="17" />
{% endif %}
</td>
{% endif %}
Expand All @@ -45,7 +45,7 @@
{% if selectable %}
<a href="#" onclick="OpenFile(ProtectPath('{{ file.url|escapejs }}'));return false;" class="fb_selectlink" title="{% trans 'Select File' %}"></a>
{% else %}
<img src="{{ settings_var.URL_FILEBROWSER_MEDIA }}img/filebrowser_icon_select_disabled.gif" width="23" height="17" />
<img src="{% static 'filebrowser/img/filebrowser_icon_select_disabled.gif' %}" width="23" height="17" />
{% endif %}
</td>
{% endif %}
Expand All @@ -59,15 +59,14 @@
{% if selectable %}
<a href="#" rel="{{ file.url|escape }}" class="fb_selectlink" title="{% trans 'Select File' %}"></a>
{% else %}
<img src="{{ settings_var.URL_FILEBROWSER_MEDIA }}img/filebrowser_icon_select_disabled.gif" width="23" height="17" />
<img src="{% static 'filebrowser/img/filebrowser_icon_select_disabled.gif' %}" width="23" height="17" />
{% endif %}
</td>
{% endif %}
{% endif %}

<!-- FILEICON -->
<td class="fb_icon"><img src="{{ settings_var.URL_FILEBROWSER_MEDIA }}img/filebrowser_type_{{ file.filetype|lower }}.gif" /></td>

<td class="fb_icon"><img src="{% get_filetype_icon file.filetype %}" /></td>
<!-- THUMBNAIL -->
{% if results_var.images_total %}
<td class="fb_icon">
Expand All @@ -86,7 +85,7 @@

<!-- RENAME -->
{% if query.pop != '4' %}
<td class="fb_icon"><a href="{% url "fb_rename" %}{% query_string %}&amp;filename={{ file.filename }}" class="fb_renamelink" title="{% trans 'Rename' %}"></a></td>
<td class="fb_icon"><a href="{% url "fb_rename" %}{% query_string %}&amp;filename={{ file.filename | urlencode }}" class="fb_renamelink" title="{% trans 'Rename' %}"></a></td>
{% endif %}

<!-- SIZE -->
Expand All @@ -98,10 +97,10 @@
<!-- DELETE -->
<td class="fb_icon">
{% if file.filetype != 'Folder' %}
<form method="POST" action="{% url "fb_delete" %}{% query_string %}&amp;filename={{ file.filename }}&amp;filetype={{ file.filetype }}" id="delete-{{ forloop.counter0 }}">{% csrf_token %}</form>
<form method="POST" action="{% url "fb_delete" %}{% query_string %}&amp;filename={{ file.filename | urlencode }}&amp;filetype={{ file.filetype }}" id="delete-{{ forloop.counter0 }}">{% csrf_token %}</form>
<a href="#" class="fb_deletelink" onclick="if (confirm('{% trans "Are you sure you want to delete this file?" %}')) {jQuery('#delete-{{ forloop.counter0 }}').submit();} return false;" title="{% trans 'Delete File' %}"></a>
{% else %}
<form method="POST" action="{% url "fb_delete" %}{% query_string %}&amp;filename={{ file.filename }}&amp;filetype={{ file.filetype }}" id="delete-{{ forloop.counter0 }}">{% csrf_token %}</form>
<form method="POST" action="{% url "fb_delete" %}{% query_string %}&amp;filename={{ file.filename | urlencode }}&amp;filetype={{ file.filetype }}" id="delete-{{ forloop.counter0 }}">{% csrf_token %}</form>
<a href="#" class="fb_deletelink" onclick="if (confirm('{% trans "Are you sure you want to delete this Folder?" %}')) {jQuery('#delete-{{ forloop.counter0 }}').submit();} return false;" title="{% trans 'Delete Folder' %}"></a>
{% endif %}
</td>
Expand Down
12 changes: 6 additions & 6 deletions filebrowser_safe/templates/filebrowser/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,29 @@
{% block stylesheets %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "grappelli/css/changelist.css" %}" />
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/filebrowser.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/filebrowser.css' %}" />
{% endblock %}

<!-- JAVASCRIPTS -->
{% block extrahead %}
{{ block.super }}

{% if query.pop == '1' %} <!-- FileBrowseField -->
<script language="javascript" type="text/javascript" src="{{ settings_var.URL_FILEBROWSER_MEDIA }}js/FB_FileBrowseField.js"></script>
<script language="javascript" type="text/javascript" src="{% static 'filebrowser/js/FB_FileBrowseField.js' %}"></script>
{% endif %}

{% if query.pop == '2' %} <!-- TinyMCE < 4 -->
<script language="javascript" type="text/javascript" src="{{ settings_var.URL_TINYMCE }}tiny_mce_popup.js"></script>
<script language="javascript" type="text/javascript" src="{{ settings_var.URL_FILEBROWSER_MEDIA }}js/FB_TinyMCE.js"></script>
<script language="javascript" type="text/javascript" src="{% static 'filebrowser/js/FB_TinyMCE.js' %}"></script>
{% if query.mce_rdomain %}<script language="javascript">document.domain = "{{ query.mce_rdomain }}"</script>{% endif %}
{% endif %}

{% if query.pop == '3' %} <!-- CKeditor (former "FCKeditor") -->
<script language="javascript" type="text/javascript" src="{{ settings_var.URL_FILEBROWSER_MEDIA }}js/FB_CKEditor.js"></script>
<script language="javascript" type="text/javascript" src="{% static 'filebrowser/js/FB_CKEditor.js' %}"></script>
{% endif %}

{% if query.pop == '5' %} <!-- TinyMCE 4 -->
<script language="javascript" type="text/javascript" src="{{ settings_var.URL_FILEBROWSER_MEDIA }}js/FB_TinyMCE4.js"></script>
<script language="javascript" type="text/javascript" src="{% static 'filebrowser/js/FB_TinyMCE4.js' %}"></script>
{% endif %}

<script type="text/javascript" src="{% static "grappelli/js/admin/Changelist.js" %}"></script>
Expand All @@ -43,7 +43,7 @@

{% block rtl_styles %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/rtl.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/rtl.css' %}" />
{% endblock %}

<!-- COLTYPE/BODYCLASS -->
Expand Down
4 changes: 2 additions & 2 deletions filebrowser_safe/templates/filebrowser/makedir.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
{% block stylesheets %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "grappelli/css/forms.css" %}" />
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/filebrowser.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/filebrowser.css' %}" />
{% endblock %}

{% block rtl_styles %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/rtl.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/rtl.css' %}" />
{% endblock %}

<!-- COLTYPE/BODYCLASS -->
Expand Down
4 changes: 2 additions & 2 deletions filebrowser_safe/templates/filebrowser/rename.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
{% block stylesheets %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "grappelli/css/forms.css" %}" />
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/filebrowser.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/filebrowser.css' %}" />
{% endblock %}

{% block rtl_styles %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/rtl.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/rtl.css' %}" />
{% endblock %}

<!-- COLTYPE/BODYCLASS -->
Expand Down
6 changes: 3 additions & 3 deletions filebrowser_safe/templates/filebrowser/upload.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@
{% block stylesheets %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static 'grappelli/css/forms.css' %}" />
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/filebrowser.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/filebrowser.css' %}" />
{% endblock %}

{% block rtl_styles %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{{ settings_var.URL_FILEBROWSER_MEDIA }}css/rtl.css" />
<link rel="stylesheet" type="text/css" href="{% static 'filebrowser/css/rtl.css' %}" />
{% endblock %}

<!-- JAVASCRIPTS -->
{% block extrahead %}
{{ block.super }}
<script type="text/javascript" src="{{ settings_var.URL_FILEBROWSER_MEDIA }}js/upload.js"></script>
<script type="text/javascript" src="{% static 'filebrowser/js/upload.js' %}"></script>
{% endblock extrahead %}

<!-- COLTYPE/BODYCLASS -->
Expand Down
5 changes: 5 additions & 0 deletions filebrowser_safe/templatetags/fb_tags.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import warnings

from django import template
from django.templatetags.static import static

from urllib.parse import quote

Expand Down Expand Up @@ -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')
15 changes: 9 additions & 6 deletions filebrowser_safe/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down
5 changes: 5 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -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"
4 changes: 2 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down