1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 from django import forms
6 from django.forms.utils import flatatt
7 from django.utils.encoding import smart_text
8 from django.utils.safestring import mark_safe
12 class JQueryAutoCompleteWidget(forms.TextInput):
13 def __init__(self, options, *args, **kwargs):
14 self.options = dumps(options)
15 super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs)
17 def render_js(self, field_id, options):
18 return u'$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options)
20 def render(self, name, value=None, attrs=None):
21 final_attrs = self.build_attrs(self.attrs, attrs)
22 final_attrs["name"] = name
24 final_attrs['value'] = smart_text(value)
26 if 'id' not in self.attrs:
27 final_attrs['id'] = 'id_%s' % name
29 html = u'''<input type="text" %(attrs)s/>
30 <script type="text/javascript">//<!--
33 'attrs': flatatt(final_attrs),
34 'js': self.render_js(final_attrs['id'], self.options),
37 return mark_safe(html)
40 class JQueryAutoCompleteSearchWidget(JQueryAutoCompleteWidget):
41 def __init__(self, *args, **kwargs):
42 super(JQueryAutoCompleteSearchWidget, self).__init__(*args, **kwargs)
44 def render_js(self, field_id, options):
48 class JQueryAutoCompleteField(forms.CharField):
49 def __init__(self, source, options=None, *args, **kwargs):
52 if 'widget' not in kwargs:
53 options['source'] = source
54 kwargs['widget'] = JQueryAutoCompleteWidget(options)
56 super(JQueryAutoCompleteField, self).__init__(*args, **kwargs)
59 class JQueryAutoCompleteSearchField(forms.CharField):
60 def __init__(self, options=None, *args, **kwargs):
63 if 'widget' not in kwargs:
64 kwargs['widget'] = JQueryAutoCompleteSearchWidget(options)
66 super(JQueryAutoCompleteSearchField, self).__init__(*args, **kwargs)