summaryrefslogtreecommitdiff
path: root/ishtar_common/widgets.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/widgets.py')
-rw-r--r--ishtar_common/widgets.py82
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)