From 6b1c313efd30c7b83ad2fb2384e61a1fa8719879 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sat, 1 Jun 2024 14:23:35 -0500 Subject: [PATCH] Fix file upload widget for oruga --- tailbone/forms/core.py | 4 ++-- tailbone/forms/widgets.py | 17 +++++++++++++++++ tailbone/templates/deform/file_upload.pt | 24 ++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/tailbone/forms/core.py b/tailbone/forms/core.py index 7601fa26..6918a9cc 100644 --- a/tailbone/forms/core.py +++ b/tailbone/forms/core.py @@ -52,7 +52,7 @@ from tailbone.util import raw_datetime, get_form_data, render_markdown from tailbone.forms import types from tailbone.forms.widgets import (ReadonlyWidget, PlainDateWidget, JQueryDateWidget, JQueryTimeWidget, - MultiFileUploadWidget) + FileUploadWidget, MultiFileUploadWidget) from tailbone.exceptions import TailboneJSONFieldError @@ -646,7 +646,7 @@ class Form(object): self.set_widget(key, dfwidget.TextAreaWidget(cols=80, rows=8)) elif type_ == 'file': tmpstore = SessionFileUploadTempStore(self.request) - kw = {'widget': dfwidget.FileUploadWidget(tmpstore), + kw = {'widget': FileUploadWidget(tmpstore, request=self.request), 'title': self.get_label(key)} if 'required' in kwargs and not kwargs['required']: kw['missing'] = colander.null diff --git a/tailbone/forms/widgets.py b/tailbone/forms/widgets.py index c0bb0b4d..2923b7ec 100644 --- a/tailbone/forms/widgets.py +++ b/tailbone/forms/widgets.py @@ -337,6 +337,23 @@ class JQueryAutocompleteWidget(dfwidget.AutocompleteInputWidget): return field.renderer(template, **tmpl_values) +class FileUploadWidget(dfwidget.FileUploadWidget): + """ + Widget to handle file upload. Must override to add ``use_oruga`` + to field template context. + """ + + def __init__(self, *args, **kwargs): + self.request = kwargs.pop('request') + super().__init__(*args, **kwargs) + + def get_template_values(self, field, cstruct, kw): + values = super().get_template_values(field, cstruct, kw) + if self.request: + values['use_oruga'] = self.request.use_oruga + return values + + class MultiFileUploadWidget(dfwidget.FileUploadWidget): """ Widget to handle multiple (arbitrary number) of file uploads. diff --git a/tailbone/templates/deform/file_upload.pt b/tailbone/templates/deform/file_upload.pt index e165fdfa..af78eaf9 100644 --- a/tailbone/templates/deform/file_upload.pt +++ b/tailbone/templates/deform/file_upload.pt @@ -2,11 +2,14 @@ + field_name field_name|field.name; + use_oruga use_oruga;">
${field.start_mapping()} - + + @@ -18,6 +21,23 @@ {{ ${vmodel}.name }} + + + + + + Click to upload + + + + {{ ${vmodel}.name }} + + + ${field.end_mapping()}