from django.conf import settings from django.core.urlresolvers import reverse from django.db.models.query import QuerySet from django.forms.widgets import Select, Widget, TextInput from django.utils.safestring import mark_safe 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' % (value, name, name, text) base += u' (' + 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
' % (name, 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'' % self.show_on html += u'' % self.label if self.require: for i in self.require: html += u'' % i required_str = u'Please fill %s to attach a new file' % self.required_label html += u'' % required_str html += u'' % 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 attach in value: html += u'%s
' % (settings.LIAISON_ATTACH_URL, attach.file_id, attach.file_extension, attach.file_title, ) else: html += u'No files attached' html += u'
' return mark_safe(html) class RelatedLiaisonWidget(TextInput): def render(self, name, value, attrs=None): if not value: value = '' title = '' noliaison = 'inline' deselect = 'none' else: if settings.USE_DB_REDESIGN_PROXY_CLASSES: from ietf.liaisons.proxy import LiaisonDetailProxy as LiaisonDetail liaison = LiaisonDetail.objects.get(pk=value) title = liaison.title if not title: files = liaison.uploads_set.all() if files: title = files[0].file_title else: title = 'Liaison #%s' % liaison.pk noliaison = 'none' deselect = 'inline' html = u'No liaison selected' % noliaison html += u'%s' % title html += u' ' % (name, value) html += u' ' % reverse('ajax_liaison_list') html += u' ' html += ' ' % name html += '' % (deselect, name) return mark_safe(html)