diff options
Diffstat (limited to 'ishtar_common/widgets.py')
| -rw-r--r-- | ishtar_common/widgets.py | 82 | 
1 files changed, 42 insertions, 40 deletions
| diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index 42a93ddaa..eb68bac2e 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -26,15 +26,16 @@ from django.conf import settings  from django.core.urlresolvers import reverse, NoReverseMatch  from django.db.models import fields  from django.forms import ClearableFileInput -from django.forms.widgets import flatatt, \ -    CheckboxSelectMultiple as CheckboxSelectMultipleBase -from django.template import Context, loader +from django.forms.utils import flatatt +from django.forms.widgets import CheckboxSelectMultiple as \ +    CheckboxSelectMultipleBase +from django.template import loader  from django.template.defaultfilters import slugify  from django.utils.encoding import smart_unicode  from django.utils.functional import lazy  from django.utils.html import escape  from django.utils.safestring import mark_safe -from django.utils.simplejson import JSONEncoder +from json import JSONEncoder  from django.utils.translation import ugettext_lazy as _  from ishtar_common import models @@ -134,8 +135,8 @@ class Select2Multiple(forms.SelectMultiple):              else:                  options = "{"              options += "     containerCssClass: 'full-width'}" -        html = super(Select2Multiple, self).render(name, value, attrs, -                                                   choices) +        self.choices = choices +        html = super(Select2Multiple, self).render(name, value, attrs)          html += """<script type="text/javascript">          $(document).ready(function() {{              $("#id_{}").select2({}); @@ -155,8 +156,7 @@ class CheckboxSelectMultiple(CheckboxSelectMultipleBase):              value = value.split(',')          if type(value) not in (list, tuple):              value = [value] -        return super(CheckboxSelectMultiple, self).render(name, value, attrs, -                                                          choices) +        return super(CheckboxSelectMultiple, self).render(name, value, attrs)  class Select2MultipleField(forms.MultipleChoiceField): @@ -191,9 +191,9 @@ class Select2MultipleField(forms.MultipleChoiceField):  class DeleteWidget(forms.CheckboxInput): -    def render(self, name, value, attrs=None): -        final_attrs = flatatt(self.build_attrs(attrs, name=name, -                                               value='1')) +    def render(self, name, value, attrs=None, renderer=None): +        final_attrs = flatatt( +            self.build_attrs(attrs, {"name": name, "value": '1'}))          output = ['<tr class="delete"><td colspan="2">']          output.append(u"<button%s>%s</button>" % (final_attrs, _("Delete")))          output.append('</td></tr>') @@ -206,16 +206,17 @@ class ImageFileInput(ClearableFileInput):  class SquareMeterWidget(forms.TextInput): -    def render(self, name, value, attrs=None): +    def render(self, name, value, attrs=None, renderer=None):          if not value:              value = u"" -        final_attrs = flatatt(self.build_attrs(attrs, name=name, value=value)) +        final_attrs = flatatt( +            self.build_attrs(attrs, {"name": name, "value": value}))          dct = {'final_attrs': final_attrs,                 'unit': settings.SURFACE_UNIT_LABEL,                 'id': attrs['id'],                 "safe_id": attrs['id'].replace('-', '_')}          t = loader.get_template('blocks/SquareMeterWidget.html') -        rendered = t.render(Context(dct)) +        rendered = t.render(dct)          return mark_safe(rendered)  AreaWidget = forms.TextInput @@ -231,7 +232,7 @@ class JQueryDate(forms.TextInput):              self.attrs['class'] = ''          self.attrs['class'] = 'date-pickup' -    def render(self, name, value=None, attrs=None): +    def render(self, name, value, attrs=None, renderer=None):          if value:              value = unicode(value)          # very specific... @@ -266,25 +267,29 @@ class JQueryDate(forms.TextInput):  class JQueryAutoComplete(forms.TextInput): -    def __init__(self, source, associated_model=None, options={}, attrs={}, -                 new=False, url_new='', multiple=False, limit={}, -                 dynamic_limit=[]): +    def __init__(self, source, associated_model=None, options=None, attrs=None, +                 new=False, url_new='', multiple=False, limit=None, +                 dynamic_limit=None):          """          Source can be a list containing the autocomplete values or a          string containing the url used for the request.          """ -        self.options = None -        self.attrs = {}          self.source = source          self.associated_model = associated_model -        if len(options) > 0: + +        self.options = None +        if options and len(options) > 0:              self.options = JSONEncoder().encode(options) -        self.attrs.update(attrs) +        self.attrs = {} + +        if attrs: +            self.attrs.update(attrs) +          self.new = new          self.url_new = url_new          self.multiple = multiple -        self.limit = limit -        self.dynamic_limit = dynamic_limit +        self.limit = limit or {} +        self.dynamic_limit = dynamic_limit or []      def value_from_datadict(self, data, files, name):          if self.multiple: @@ -313,22 +318,20 @@ class JQueryAutoComplete(forms.TextInput):          if self.options:              dct['options'] = mark_safe('%s' % self.options) -        js = ""          tpl = 'blocks/JQueryAutocomplete.js'          if self.multiple:              tpl = 'blocks/JQueryAutocompleteMultiple.js'          t = loader.get_template(tpl) -        js = t.render(Context(dct)) +        js = t.render(dct)          return js -    def render(self, name, value=None, attrs=None): -        attrs_hidden = self.build_attrs(attrs, name=name) +    def render(self, name, value, attrs=None, renderer=None): +        attrs_hidden = self.build_attrs(attrs, {"name": name})          attrs_select = self.build_attrs(attrs)          attrs_select['placeholder'] = _(u"Search...")          if value:              hiddens = []              selects = [] -            values = value              if type(value) not in (list, tuple):                  values = unicode(escape(smart_unicode(value)))                  values = values.replace('[', '').replace(']', '') @@ -428,8 +431,8 @@ class JQueryTown(forms.TextInput):                  raise ValueError('source type is not valid')          return encoded_src -    def render(self, name, value=None, attrs=None): -        attrs_hidden = self.build_attrs(attrs, name=name) +    def render(self, name, value, attrs=None, renderer=None): +        attrs_hidden = self.build_attrs(attrs, {"name": name})          attrs_select = self.build_attrs(attrs)          attrs_select['placeholder'] = _(u"Search...")          selected = '' @@ -487,7 +490,7 @@ class JQueryTown(forms.TextInput):                      'selected_state': selected_state}                     )          html = loader.get_template('blocks/JQueryAdvancedTown.html')\ -                     .render(Context(dct)) +                     .render(dct)          return html @@ -540,11 +543,11 @@ class JQueryPersonOrganization(forms.TextInput):                 'field_id': field_id}          if self.options:              dct['options'] = mark_safe('%s' % self.options) -        js = loader.get_template(self.js_template).render(Context(dct)) +        js = loader.get_template(self.js_template).render(dct)          return js -    def render(self, name, value=None, attrs=None): -        attrs_hidden = self.build_attrs(attrs, name=name) +    def render(self, name, value, attrs=None, renderer=None): +        attrs_hidden = self.build_attrs(attrs, {'name': name})          attrs_select = self.build_attrs(attrs)          attrs_select['placeholder'] = _(u"Search...")          selected = '' @@ -586,7 +589,7 @@ class JQueryPersonOrganization(forms.TextInput):                 'name': name,                 'js': self.render_js(name, selected),                 'new': mark_safe(new)} -        html = loader.get_template(self.html_template).render(Context(dct)) +        html = loader.get_template(self.html_template).render(dct)          return html @@ -692,11 +695,10 @@ class JQueryJqGrid(forms.RadioSelect):              extra_cols = extra_cols and ", ".join(extra_cols) or ""          return jq_col_names, extra_cols -    def render(self, name, value=None, attrs=None): +    def render(self, name, value, attrs=None, renderer=None):          t = loader.get_template('blocks/form_flex_snippet.html')          form = self.form() -        rendered = t.render(Context({'form': form, -                                     'flex': True})) +        rendered = t.render({'form': form, 'flex': True})          dct = {}          if self.new:              model_name = self.associated_model._meta.object_name.lower() @@ -744,5 +746,5 @@ class JQueryJqGrid(forms.RadioSelect):                      'multi_cols': ",".join((u'"%d"' % col                                             for col in self.multiple_cols))})          t = loader.get_template('blocks/JQueryJqGrid.html') -        rendered += t.render(Context(dct)) +        rendered += t.render(dct)          return mark_safe(rendered) | 
