from itertools import chain import os from django import forms from django.forms.util import flatatt from django.utils.encoding import force_unicode from django.utils.html import conditional_escape from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ class PlainWidget(forms.widgets.Widget): """ Class to define a form widget that effectively nulls the htmls of a widget and reduces the output to only it's value """ def render(self, name, value, attrs=None): return mark_safe(u'%s' % value) class DetailSelectMultiple(forms.widgets.SelectMultiple): def __init__(self, queryset=None, *args, **kwargs): self.queryset = queryset super(DetailSelectMultiple, self).__init__(*args, **kwargs) def render(self, name, value, attrs=None, choices=(), *args, **kwargs): if value is None: value = '' final_attrs = self.build_attrs(attrs, name=name) css_class = final_attrs.get('class', 'list') output = u'\n') def exists_with_famfam(path): try: return two_state_template(os.path.exists(path)) except Exception as exception: return exception def two_state_template(state, famfam_ok_icon=u'tick', famfam_fail_icon=u'cross'): if state: return mark_safe(u'' % famfam_ok_icon) else: return mark_safe(u'' % famfam_fail_icon) class TextAreaDiv(forms.widgets.Widget): """ Class to define a form widget that simulates the behavior of a Textarea widget but using a div tag instead """ def __init__(self, attrs=None): # The 'rows' and 'cols' attributes are required for HTML correctness. default_attrs = {'class': 'text_area_div'} if attrs: default_attrs.update(attrs) super(TextAreaDiv, self).__init__(default_attrs) def render(self, name, value, attrs=None): if value is None: value = u'' flat_attrs = flatatt(self.build_attrs(attrs, name=name)) content = conditional_escape(force_unicode(value)) result = u'%s' % (flat_attrs, content) return mark_safe(result) # From: http://www.peterbe.com/plog/emailinput-html5-django class EmailInput(forms.widgets.Input): """ Class for a login form widget that accepts only well formated email address """ input_type = 'email' def render(self, name, value, attrs=None): if attrs is None: attrs = {} attrs.update(dict(autocorrect='off', autocapitalize='off', spellcheck='false')) return super(EmailInput, self).render(name, value, attrs=attrs) class ScrollableCheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple): """ Class for a form widget composed of a selection of checkboxes wrapped in a div tag with automatic overflow to add scrollbars when the list exceds the height of the div """ def render(self, name, value, attrs=None, choices=()): if value is None: value = [] has_id = attrs and 'id' in attrs final_attrs = self.build_attrs(attrs, name=name) output = [u'') return mark_safe(u'
%s
' % u'\n'.join(output))