From: Stephen Burrows Date: Sat, 27 Aug 2011 23:04:50 +0000 (-0700) Subject: Merge branch 'taggit' into develop X-Git-Tag: philo-0.9.1^2~3^2 X-Git-Url: http://git.ithinksw.org/philo.git/commitdiff_plain/cbbff4f681be1a7a1666424d7c2883dfd4a7c30d Merge branch 'taggit' into develop Conflicts: philo/admin/widgets.py philo/contrib/penfield/admin.py --- cbbff4f681be1a7a1666424d7c2883dfd4a7c30d diff --cc philo/admin/widgets.py index 7fda164,637475e..3d7d64b --- a/philo/admin/widgets.py +++ b/philo/admin/widgets.py @@@ -1,7 -1,6 +1,7 @@@ from django import forms from django.conf import settings - from django.contrib.admin.widgets import FilteredSelectMultiple, url_params_from_lookup_dict + 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 @@@ -38,59 -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)) + return mark_safe(u''.join(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", - "philo/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)) - - +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',) ++ js = ('philo/js/EmbedWidget.js',) diff --cc philo/contrib/penfield/admin.py index 4cfa1a6,0800be1..31aacb1 --- a/philo/contrib/penfield/admin.py +++ b/philo/contrib/penfield/admin.py @@@ -3,10 -3,8 +3,10 @@@ from django.contrib import admi from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect, QueryDict - from philo.admin import EntityAdmin, AddTagAdmin, COLLAPSE_CLASSES + from philo.admin import EntityAdmin, COLLAPSE_CLASSES +from philo.admin.widgets import EmbedWidget from philo.contrib.penfield.models import BlogEntry, Blog, BlogView, Newsletter, NewsletterArticle, NewsletterIssue, NewsletterView +from philo.models.fields import TemplateField class DelayedDateForm(forms.ModelForm): diff --cc philo/contrib/penfield/models.py index 6eef5df,eef8974..a57459c --- a/philo/contrib/penfield/models.py +++ b/philo/contrib/penfield/models.py @@@ -57,13 -62,13 +63,13 @@@ class BlogEntry(Entity) date = models.DateTimeField(default=None) #: The content of the :class:`BlogEntry`. - content = models.TextField() + content = TemplateField() #: An optional brief excerpt from the :class:`BlogEntry`. - excerpt = models.TextField(blank=True, null=True) + excerpt = TemplateField(blank=True, null=True) - #: :class:`.Tag`\ s for this :class:`BlogEntry`. - tags = models.ManyToManyField(Tag, related_name='blogentries', blank=True, null=True) + #: A ``django-taggit`` :class:`TaggableManager`. + tags = TaggableManager() def save(self, *args, **kwargs): if self.date is None: