from django.conf import settings from django.db.models.query import QuerySet from django.forms.widgets import Select, Widget from django.utils.safestring import mark_safe from django.utils.html import conditional_escape class FromWidget(Select): def __init__(self, *args, **kwargs): super(FromWidget, self).__init__(*args, **kwargs) self.full_power_on = [] self.reduced_to_set = [] def render(self, name, value, attrs=None, choices=()): all_choices = list(self.choices) + list(choices) if (len(all_choices) != 1 or (isinstance(all_choices[0][1], (list, tuple)) and len(all_choices[0][1]) != 1)): base = super(FromWidget, self).render(name, value, attrs, choices) else: option = all_choices[0] if isinstance(option[1], (list, tuple)): option = option[1][0] value = option[0] text = option[1] base = u'%s' % (conditional_escape(value), conditional_escape(name), conditional_escape(name), conditional_escape(text)) base += u' ' + conditional_escape(self.submitter) + u'' if self.full_power_on: base += '' return mark_safe(base) class ReadOnlyWidget(Widget): def render(self, name, value, attrs=None): html = u'
%s
' % (conditional_escape(name), conditional_escape(value or '')) return mark_safe(html) class ButtonWidget(Widget): def __init__(self, *args, **kwargs): self.label = kwargs.pop('label', None) self.show_on = kwargs.pop('show_on', None) self.require = kwargs.pop('require', None) self.required_label = kwargs.pop('required_label', None) super(ButtonWidget, self).__init__(*args, **kwargs) def render(self, name, value, attrs=None): html = u'' % conditional_escape(self.show_on) html += u'' % conditional_escape(self.label) if self.require: for i in self.require: html += u'' % conditional_escape(i) required_str = u'Please fill in %s to attach a new file' % conditional_escape(self.required_label) html += u'' % conditional_escape(required_str) html += u'' % conditional_escape(self.label) return mark_safe(html) class ShowAttachmentsWidget(Widget): def render(self, name, value, attrs=None): html = u'
' % name html += u'' html += u'
' if value and isinstance(value, QuerySet): for attachment in value: html += u'%s
' % (settings.LIAISON_ATTACH_URL, conditional_escape(attachment.external_url), conditional_escape(attachment.title)) else: html += u'No files attached' html += u'
' return mark_safe(html)