X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/2f7a76a00f2bcae2f67459b7fd86806278ef9b66..ca4643640b3e41bc557ecd996d835e67ef707d5e:/admin/widgets.py?ds=sidebyside diff --git a/admin/widgets.py b/admin/widgets.py index a1f5bae..7a47c63 100644 --- a/admin/widgets.py +++ b/admin/widgets.py @@ -1,5 +1,10 @@ from django import forms from django.conf import settings +from django.contrib.admin.widgets import FilteredSelectMultiple +from django.utils.translation import ugettext as _ +from django.utils.safestring import mark_safe +from django.utils.text import truncate_words +from django.utils.html import escape class ModelLookupWidget(forms.TextInput): @@ -26,4 +31,35 @@ class ModelLookupWidget(forms.TextInput): output += ' %s' % escape(truncate_words(value_object, 14)) except value_class.DoesNotExist: pass - return mark_safe(output) \ No newline at end of file + return mark_safe(output) + + +class TagFilteredSelectMultiple(FilteredSelectMultiple): + """ + A SelectMultiple with a JavaScript filter interface. + + Note that the resulting JavaScript assumes that the jsi18n + catalog has been loaded in the page + """ + class Media: + js = (settings.ADMIN_MEDIA_PREFIX + "js/core.js", + settings.ADMIN_MEDIA_PREFIX + "js/SelectBox.js", + settings.ADMIN_MEDIA_PREFIX + "js/SelectFilter2.js") + + if 'staticmedia' in settings.INSTALLED_APPS: + import staticmedia + js += (staticmedia.url('admin/js/TagCreation.js'),) + else: + js += (settings.ADMIN_MEDIA_PREFIX + "js/TagCreation.js",) + + def render(self, name, value, attrs=None, choices=()): + if attrs is None: attrs = {} + attrs['class'] = 'selectfilter' + if self.is_stacked: attrs['class'] += 'stacked' + output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)] + output.append(u'\n' % \ + (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.ADMIN_MEDIA_PREFIX, name)) + return mark_safe(u''.join(output)) \ No newline at end of file