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 += '
'
for from_code in self.full_power_on:
base += '' % from_code
for to_code in self.reduced_to_set:
base += '' % to_code
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'%s' % self.show_on
html += u'%s' % self.label
if self.require:
for i in self.require:
html += u'%s' % i
required_str = u'Please fill %s to attach a new file' % self.required_label
html += u'%s' % 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'No files attached'
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'%s ' % reverse('ajax_liaison_list')
html += u' '
html += ' ' % name
html += '' % (deselect, name)
return mark_safe(html)