diff options
Diffstat (limited to 'ishtar_common/widgets.py')
-rw-r--r-- | ishtar_common/widgets.py | 103 |
1 files changed, 28 insertions, 75 deletions
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index 1ddabe7c7..24a87d5a8 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -251,11 +251,13 @@ 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): @@ -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) |