Author: david.michon
Date: Thu Apr  2 02:46:50 2009
New Revision: 430

Modified:
    trunk/pages/admin/__init__.py
    trunk/pages/admin/widgets.py
    trunk/pages/models.py
    trunk/pages/settings.py
    trunk/pages/utils.py
    trunk/pages/views.py

Log:
Add redirect_to on page model. Now we can define a redirection when a user  
click on a page. It can be useful to have a menu page to fallback to  
another.

Add handling for tinyMCE widget slightly differently by using the  
django-tinymce project. A new settings "PAGE_TINYMCE" can be enabled to use  
it. Note that django-tinymce handle django-filebrowser easily.

Modified: trunk/pages/admin/__init__.py
==============================================================================
--- trunk/pages/admin/__init__.py       (original)
+++ trunk/pages/admin/__init__.py       Thu Apr  2 02:46:50 2009
@@ -48,7 +48,7 @@
      normal_fields = ['language']
      if settings.PAGE_TEMPLATES:
          normal_fields.append('template')
-
+    normal_fields.append('redirect_to')
      fieldsets = (
          (_('General'), {
              'fields': general_fields,

Modified: trunk/pages/admin/widgets.py
==============================================================================
--- trunk/pages/admin/widgets.py        (original)
+++ trunk/pages/admin/widgets.py        Thu Apr  2 02:46:50 2009
@@ -5,8 +5,7 @@
  from django.utils.safestring import mark_safe
  from django.template import RequestContext
  from django.template.loader import render_to_string
-
-from pages.settings import PAGES_MEDIA_URL, PAGE_TAGGING
+from pages.settings import PAGES_MEDIA_URL, PAGE_TAGGING, PAGE_TINYMCE
  from pages.models import Page

  if PAGE_TAGGING:
@@ -56,29 +55,21 @@
          return rendered + mark_safe(render_to_string(
              'admin/pages/page/widgets/richtextarea.html', context))

-class TinyMCE(Textarea):
-
-    class Media:
-        js = [join(PAGES_MEDIA_URL, path) for path in (
-            'tiny_mce/tiny_mce.js',
-        )]
-
-    def __init__(self, language=None, attrs=None):
-        self.language = language or settings.LANGUAGE_CODE[:2]
-        self.attrs = {'class': 'tinymce'}
-        if attrs:
-            self.attrs.update(attrs)
-        super(TinyMCE, self).__init__(attrs)
-
-    def render(self, name, value, attrs=None):
-        rendered = super(TinyMCE, self).render(name, value, attrs)
-        context = {
-            'name': name,
-            'language': self.language,
-            'PAGES_MEDIA_URL': PAGES_MEDIA_URL,
-        }
-        return rendered + mark_safe(render_to_string(
-            'admin/pages/page/widgets/tinymce.html', context))
+if PAGE_TINYMCE:
+    from tinymce import widgets as tinymce_widgets
+
+    class TinyMCE(tinymce_widgets.TinyMCE):
+        def __init__(self, content_language=None, attrs=None,  
mce_attrs={}):
+            self.mce_attrs = mce_attrs
+            self.mce_attrs.update({
+                'mode': "exact",
+                'theme': "advanced",
+                'width': 640,
+                'height': 400,
+                'theme_advanced_toolbar_location': "top",
+                'theme_advanced_toolbar_align': "left"
+            })
+            super(TinyMCE, self).__init__(content_language, attrs,  
mce_attrs)

  class WYMEditor(Textarea):


Modified: trunk/pages/models.py
==============================================================================
--- trunk/pages/models.py       (original)
+++ trunk/pages/models.py       Thu Apr  2 02:46:50 2009
@@ -55,7 +55,9 @@
      # Disable could make site tests fail
      sites = models.ManyToManyField(Site, default=[settings.SITE_ID],
              help_text=_('The site(s) the page is accessible at.'),  
verbose_name=_('sites'))
-
+
+    redirect_to = models.ForeignKey('self', null=True, blank=True,  
related_name='redirected_pages')
+
      # Managers
      objects = PageManager()


Modified: trunk/pages/settings.py
==============================================================================
--- trunk/pages/settings.py     (original)
+++ trunk/pages/settings.py     Thu Apr  2 02:46:50 2009
@@ -26,6 +26,11 @@
  if PAGE_TAGGING and "tagging" not in getattr(settings, 'INSTALLED_APPS',  
[]):
      raise ImproperlyConfigured("django-tagging could not be found.\nPlease  
make sure you've installed it correctly or disable the tagging feature by  
setting PAGE_TAGGING to False.")

+# Whether to enable tinymce.
+PAGE_TINYMCE = getattr(settings, 'PAGE_TINYMCE', False)
+if PAGE_TINYMCE and "tinymce" not in getattr(settings, 'INSTALLED_APPS',  
[]):
+    raise ImproperlyConfigured("django-tinymce could not be found.\nPlease  
make sure you've installed it correctly or disable the tinymce feature by  
setting PAGE_TINYMCE to False.")
+
  # Whether to only allow unique slugs.
  PAGE_UNIQUE_SLUG_REQUIRED = getattr(settings, 'PAGE_UNIQUE_SLUG_REQUIRED',  
False)


Modified: trunk/pages/utils.py
==============================================================================
--- trunk/pages/utils.py        (original)
+++ trunk/pages/utils.py        Thu Apr  2 02:46:50 2009
@@ -5,10 +5,11 @@
  from django.shortcuts import render_to_response
  from django.template import RequestContext
  from django.db.models import signals
-from django.http import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect,  
HttpResponsePermanentRedirect
  from django.core.handlers.wsgi import WSGIRequest
  from django.contrib.sites.models import Site, RequestSite, SITE_CACHE
  from pages import settings
+from exceptions import Exception as Except

  def get_placeholders(template_name):
      """
@@ -66,7 +67,7 @@
              # return only context dictionary
              del(kwargs['only_context'])
              response = func(request, *args, **kwargs)
-            if isinstance(response, HttpResponse) or isinstance(response,  
HttpResponseRedirect):
+            if isinstance(response, HttpResponse) or isinstance(response,  
HttpResponseRedirect) or isinstance(response,  
HttpResponsePermanentRedirect):
                  raise Except("cannot return context dictionary because a  
HttpResponseRedirect as been found")
              (template_name, context) = response
              return context
@@ -74,14 +75,19 @@
              t = kwargs['template_name']
              del kwargs['template_name']
          response = func(request, *args, **kwargs)
-        if isinstance(response, HttpResponse) or isinstance(response,  
HttpResponseRedirect):
+        if isinstance(response, HttpResponse) or isinstance(response,  
HttpResponseRedirect) or isinstance(response,  
HttpResponsePermanentRedirect):
              return response
+
+        if response[1].get('http_redirect', False):
+            return response[1].get('http_redirect')
+
          (template_name, context) = response
          if not t:
              t = template_name
          context['template_name'] = t
          return render_to_response(t, context,  
context_instance=RequestContext(request))
      return _dec
+

  def get_template_from_request(request, obj=None):
      """

Modified: trunk/pages/views.py
==============================================================================
--- trunk/pages/views.py        (original)
+++ trunk/pages/views.py        Thu Apr  2 02:46:50 2009
@@ -1,11 +1,12 @@
  # -*- coding: utf-8 -*-
-from django.http import Http404
+from django.http import Http404, HttpResponsePermanentRedirect
  from django.shortcuts import get_object_or_404
  from django.contrib.sites.models import SITE_CACHE
  from pages import settings
  from pages.models import Page, Content
  from pages.utils import auto_render, get_language_from_request,  
get_page_from_slug

+
  def details(request, slug=None, lang=None):
      """
      Example view that get the root pages for navigation,
@@ -26,10 +27,13 @@

      if not current_page.calculated_status in (Page.PUBLISHED, Page.HIDDEN):
          raise Http404
-
+
      if not lang:
          lang = get_language_from_request(request, current_page)
-
+
+    if current_page.redirect_to:
+        http_redirect =  
HttpResponsePermanentRedirect(current_page.redirect_to.get_absolute_url(lang))
+
      template_name = current_page.get_template()
      return template_name, locals()
  details = auto_render(details)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to