X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/d918e1993166047a20e3f8babd538afda214f7c0..c5586d632dc2cf5b06af929b2cb38131042c0ed6:/philo/admin/widgets.py?ds=sidebyside diff --git a/philo/admin/widgets.py b/philo/admin/widgets.py index 637475e..3d7d64b 100644 --- a/philo/admin/widgets.py +++ b/philo/admin/widgets.py @@ -1,6 +1,7 @@ from django import forms from django.conf import settings from django.contrib.admin.widgets import url_params_from_lookup_dict +from django.utils import simplejson as json from django.utils.html import escape from django.utils.safestring import mark_safe from django.utils.text import truncate_words @@ -37,4 +38,31 @@ class ModelLookupWidget(forms.TextInput): output.append(' %s' % escape(truncate_words(value_object, 14))) except value_class.DoesNotExist: pass - return mark_safe(u''.join(output)) \ No newline at end of file + return mark_safe(u''.join(output)) + + +class EmbedWidget(forms.Textarea): + """A form widget with the HTML class embedding and an embedded list of content-types.""" + def __init__(self, attrs=None): + from philo.models import value_content_type_limiter + + content_types = value_content_type_limiter.classes + data = [] + + for content_type in content_types: + data.append({'app_label': content_type._meta.app_label, 'object_name': content_type._meta.object_name.lower(), 'verbose_name': unicode(content_type._meta.verbose_name)}) + + json_ = json.dumps(data) + + default_attrs = {'class': 'embedding vLargeTextField', 'data-content-types': json_ } + + if attrs: + default_attrs.update(attrs) + + super(EmbedWidget, self).__init__(default_attrs) + + class Media: + css = { + 'all': ('philo/css/EmbedWidget.css',), + } + js = ('philo/js/EmbedWidget.js',)