##// END OF EJS Templates
Made quote button actually button so it is impossible to accidentally quote its text
Made quote button actually button so it is impossible to accidentally quote its text

File last commit:

r1900:519e9955 default
r1909:004a4ff8 default
Show More
fields.py
86 lines | 2.4 KiB | text/x-python | PythonLexer
from django import forms
from django.utils.translation import ugettext_lazy as _
ATTRIBUTE_PLACEHOLDER = 'placeholder'
ATTRIBUTE_ROWS = 'rows'
URL_ROWS = 2
URL_PLACEHOLDER = _('Insert URLs on separate lines.')
class MultipleFileInput(forms.FileInput):
"""
Input that allows to enter many files at once, utilizing the html5 "multiple"
attribute of a file input.
"""
def value_from_datadict(self, data, files, name):
if len(files) == 0:
return None
else:
return files.getlist(name)
class MultipleFileField(forms.FileField):
"""
Field that allows to enter multiple files from one input.
"""
def to_python(self, data):
if not data or len(data) == 0:
return None
for file in data:
super().to_python(file)
return data
class UrlFileWidget(forms.MultiWidget):
"""
Widget with a file input and a text input that allows to enter either a
file from a local system, or a URL from which the file would be downloaded.
"""
def __init__(self, *args, **kwargs):
widgets = (
MultipleFileInput(attrs={
'accept': 'file/*',
'multiple': ''
}),
forms.Textarea(attrs={
ATTRIBUTE_PLACEHOLDER: URL_PLACEHOLDER,
ATTRIBUTE_ROWS: URL_ROWS,
}),
)
super().__init__(widgets, *args, **kwargs)
def decompress(self, value):
return [None, None]
class UrlFileField(forms.MultiValueField):
"""
Field with a file input and a text input that allows to enter either a
file from a local system, or a URL from which the file would be downloaded.
"""
widget = UrlFileWidget
def __init__(self, *args, **kwargs):
fields = (
MultipleFileField(required=False, label=_('File')),
forms.CharField(required=False, label=_('File URL')),
)
super().__init__(
fields=fields,
require_all_fields=False, *args, **kwargs)
def compress(self, data_list):
all_data = []
for data in data_list:
if type(data) == list:
all_data += data
elif type(data) == str and len(data) > 0:
file_input = data.replace('\r\n', '\n')
url_list = file_input.split('\n')
all_data += url_list
return all_data