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.py107
1 files changed, 30 insertions, 77 deletions
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index 1ddabe7c7..a9fcdf798 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -251,16 +251,18 @@ class Select2MultipleField(forms.MultipleChoiceField):
class DeleteWidget(forms.CheckboxInput):
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>')
- return mark_safe('\n'.join(output))
+ self.build_attrs(
+ attrs, {"name": name, "value": '1',
+ 'class': "btn btn-danger"})
+ )
+ output = u"<button%s>%s</button>" % (final_attrs, _("Delete"))
+
+ return mark_safe(output)
class ImageFileInput(ClearableFileInput):
- template_with_initial = u'<span class="prettyPhoto">%(initial)s</span>'\
- u' %(clear_template)s<br />%(input_text)s: %(input)s'
+ template_name = 'widgets/image_input.html'
+ NO_FORM_CONTROL = True
class SquareMeterWidget(forms.TextInput):
@@ -277,53 +279,13 @@ class SquareMeterWidget(forms.TextInput):
rendered = t.render(dct)
return mark_safe(rendered)
+
AreaWidget = forms.TextInput
if settings.SURFACE_UNIT == 'square-metre':
AreaWidget = SquareMeterWidget
-class JQueryDate(forms.TextInput):
- def __init__(self, *args, **kwargs):
- super(JQueryDate, self).__init__(*args, **kwargs)
- if 'class' not in self.attrs:
- self.attrs['class'] = ''
- self.attrs['class'] = 'date-pickup'
-
- def render(self, name, value, attrs=None, renderer=None):
- if value:
- value = unicode(value)
- # very specific...
- if settings.COUNTRY == 'fr' and value and '/' in value:
- values = value.split('/')
- if len(values) == 3:
- value = "%s-%s-%s" % (values[2], values[1], values[0])
- if not attrs:
- attrs = {}
- attrs['autocomplete'] = 'off'
- rendered = super(JQueryDate, self).render(name, value, attrs)
- # use window.onload to be sure that datepicker don't interfere
- # with autocomplete fields
- var_name = name.replace('-', '_')
- rendered += """
-<script type="text/javascript"><!--//
- function load_jquerydate_%(var_name)s(){
- $(".date-pickup").datepicker($.datepicker.regional["%(country)s"]);
- var val = $("#id_%(name)s").val();
- if(val){
- var dt = $.datepicker.parseDate('yy-mm-dd', val);
- val = $.datepicker.formatDate(
- $.datepicker.regional["%(country)s"]['dateFormat'],
- dt);
- $("#id_%(name)s").val(val);
- }
- }
- $(window).load(load_jquerydate_%(var_name)s);
-//--></script>
-""" % {"name": name, "var_name": var_name, "country": settings.COUNTRY}
- return rendered
-
-
class JQueryAutoComplete(forms.TextInput):
def __init__(self, source, associated_model=None, options=None, attrs=None,
new=False, url_new='', multiple=False, limit=None,
@@ -424,8 +386,12 @@ class JQueryAutoComplete(forms.TextInput):
attrs_select['id'] = 'id_select_%s' % name
if 'class' not in attrs_select:
attrs_select['class'] = 'autocomplete'
+
+ attrs_select['class'] += ' form-control'
new = ''
+ html = u""
if self.new:
+ html = u"<div class='input-group'>"
model_name = self.associated_model._meta.object_name.lower()
limits = []
for k in self.limit:
@@ -438,13 +404,14 @@ class JQueryAutoComplete(forms.TextInput):
if self.url_new:
url_new = self.url_new
url_new = reverse(url_new, args=args)
- new = u' <a href="#" class="add-button" '\
- u'onclick="open_window(\'%s\');">+</a>' % url_new
- html = u'''<input%(attrs_select)s/>%(new)s\
+ new = u'<span class="input-group-append">'\
+ u'<a href="#" class="add-button input-group-text" '\
+ u'onclick="open_window(\'%s\');">+</a></span></div>' % url_new
+ html += u"""<input%(attrs_select)s/>%(new)s\
<input type="hidden"%(attrs_hidden)s/>\
<script type="text/javascript"><!--//
%(js)s//--></script>
- ''' % {
+ """ % {
'attrs_select': flatatt(attrs_select),
'attrs_hidden': flatatt(attrs_hidden),
'js': self.render_js(name),
@@ -651,22 +618,14 @@ class JQueryPersonOrganization(forms.TextInput):
return html
-class JQueryJqGrid(forms.RadioSelect):
- COL_TPL = "{name:'%(idx)s', index:'%(idx)s', sortable:true}"
-
- # class Media:
- # js = ['%s/js/i18n/grid.locale-%s.js' % (settings.STATIC_URL,
- # settings.COUNTRY),
- # '%s/js/jquery.jqGrid.min.js' % settings.STATIC_URL]
- # css = {'all': ['%s/media/ui.jqgrid.css' % settings.STATIC_URL]}
-
+class DataTable(forms.RadioSelect):
def __init__(self, source, form, associated_model, attrs={},
table_cols='TABLE_COLS', multiple=False, multiple_cols=[2],
new=False, new_message="", source_full=None,
multiple_select=False, sortname="__default__",
col_prefix=''):
"""
- JQueryJqGrid widget init.
+ DataTable widget init.
:param source: url to get the item from -- get_item
:param form:
@@ -682,7 +641,7 @@ class JQueryJqGrid(forms.RadioSelect):
:param sortname: column name (model attribute) to use to sort
:param col_prefix: prefix to remove to col_names
"""
- super(JQueryJqGrid, self).__init__(attrs=attrs)
+ super(DataTable, self).__init__(attrs=attrs)
self.source = source
self.form = form
if not attrs:
@@ -742,21 +701,14 @@ class JQueryJqGrid(forms.RadioSelect):
else:
jq_col_names.append(settings.JOINT.join(
[f for f in field_verbose_names if f]))
- if not python:
- jq_col_names[-1] = u'"%s"' % jq_col_names[-1]
- if python:
- extra_cols.append(field_name)
- else:
- extra_cols.append(self.COL_TPL % {'idx': field_name})
- if not python:
- jq_col_names = jq_col_names and ", ".join(jq_col_names) or ""
- extra_cols = extra_cols and ", ".join(extra_cols) or ""
+ extra_cols.append(field_name)
return jq_col_names, extra_cols
def render(self, name, value, attrs=None, renderer=None):
- t = loader.get_template('blocks/form_flex_snippet.html')
+ # t = loader.get_template('blocks/form_flex_snippet.html')
+ t = loader.get_template('blocks/bs_form_snippet.html')
form = self.form()
- rendered = t.render({'form': form, 'flex': True})
+ rendered = t.render({'form': form, 'search': True})
dct = {}
if self.new:
model_name = self.associated_model._meta.object_name.lower()
@@ -792,10 +744,11 @@ class JQueryJqGrid(forms.RadioSelect):
dct['extra_sources'].append((
imp.slug, imp.name,
reverse('get-by-importer', args=[imp.slug])))
+ source = unicode(self.source)
dct.update({'name': name,
'col_names': col_names,
'extra_cols': extra_cols,
- 'source': unicode(self.source),
+ 'source': source,
'col_idx': col_idx,
'no_result': unicode(_("No results")),
'loading': unicode(_("Loading...")),
@@ -804,7 +757,7 @@ class JQueryJqGrid(forms.RadioSelect):
'multiple': self.multiple,
'multiple_select': self.multiple_select,
'multi_cols': ",".join((u'"%d"' % col
- for col in self.multiple_cols))})
- t = loader.get_template('blocks/JQueryJqGrid.html')
+ for col in self.multiple_cols))})
+ t = loader.get_template('blocks/DataTables.html')
rendered += t.render(dct)
return mark_safe(rendered)