Merge branch 'more_customizations'
authorMichele Ciccozzi <cico@lapcico.(none)>
Mon, 6 Jun 2011 13:06:45 +0000 (15:06 +0200)
committerMichele Ciccozzi <cico@lapcico.(none)>
Mon, 6 Jun 2011 13:06:45 +0000 (15:06 +0200)
Conflicts:
pagination/templates/pagination/pagination.html
pagination/templatetags/pagination_tags.py

1  2 
pagination/templates/pagination/default.html
pagination/templatetags/pagination_tags.py

index 0000000,794765b..2fe8410
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,38 +1,38 @@@
 -                <a href="?page={{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}" class="prev">{{ previous_link_decorator|safe }}{% trans "previous" %}</a>
+ {% if is_paginated %}
+     {% load i18n %}
+     <div class="pagination">
+         {% block previouslink %}
+             {% if page_obj.has_previous %}
 -                    <span class="disabled prev">{{ previous_link_decorator|safe }}{% trans "previous" %}</span>    
++                <a href="?page{{ page_suffix }}={{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}" class="prev">{{ previous_link_decorator|safe }}{% trans "previous" %}</a>
+             {% else %}
+                 {% if display_disabled_previous_link %}
 -            {% endif %}            
++                    <span class="disabled prev">{{ previous_link_decorator|safe }}{% trans "previous" %}</span>
+                 {% endif %}
 -                            <a href="?page={{ page }}{{ getvars }}{{ hashtag }}" class="page">{{ page }}</a>
++            {% endif %}
+         {% endblock previouslink %}
+         {% block pagelinks %}
+             {% if display_page_links %}
+                 {% for page in pages %}
+                     {% if page %}
+                         {% ifequal page page_obj.number %}
+                             <span class="current page">{{ page }}</span>
+                         {% else %}
 -                {% endfor %}        
 -            {% endif %}            
++                            <a href="?page{{ page_suffix }}={{ page }}{{ getvars }}{{ hashtag }}" class="page">{{ page }}</a>
+                         {% endifequal %}
+                     {% else %}
+                         ...
+                     {% endif %}
 -                <a href="?page={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}" class="next">{% trans "next" %}{{ next_link_decorator|safe }}</a>
++                {% endfor %}
++            {% endif %}
+         {% endblock pagelinks %}
+         {% block nextlink %}
+             {% if page_obj.has_next %}
 -            {% endif %}            
++                <a href="?page{{ page_suffix }}={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}" class="next">{% trans "next" %}{{ next_link_decorator|safe }}</a>
+             {% else %}
+                 {% if display_disabled_next_link %}
+                     <span class="disabled next">{% trans "next" %}{{ next_link_decorator|safe }}</span>
+                 {% endif %}
 -{% endif %}
++            {% endif %}
+         {% endblock nextlink %}
+     </div>
++{% endif %}
index 3273538,fe4bd07..2ad1403
mode 100644,100755..100755
@@@ -4,7 -4,6 +4,7 @@@ except NameError
      from sets import Set as set
  
  from django import template
 +from django.template import TOKEN_BLOCK
  from django.http import Http404
  from django.core.paginator import Paginator, InvalidPage
  from django.conf import settings
@@@ -16,17 -15,16 +16,22 @@@ DEFAULT_WINDOW = getattr(settings, 'PAG
  DEFAULT_ORPHANS = getattr(settings, 'PAGINATION_DEFAULT_ORPHANS', 0)
  INVALID_PAGE_RAISES_404 = getattr(settings,
      'PAGINATION_INVALID_PAGE_RAISES_404', False)
 -DISPLAY_DISABLED_PREVIOUS_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_PREVIOUS_LINK', True)
 -DISPLAY_DISABLED_NEXT_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_NEXT_LINK', True)
+ DISPLAY_PAGE_LINKS = getattr(settings, 'PAGINATION_DISPLAY_PAGE_LINKS', True)
+ PREVIOUS_LINK_DECORATOR = getattr(settings, 'PAGINATION_PREVIOUS_LINK_DECORATOR', "&lsaquo;&lsaquo; ")
+ NEXT_LINK_DECORATOR = getattr(settings, 'PAGINATION_NEXT_LINK_DECORATOR', " &rsaquo;&rsaquo;")
++DISPLAY_DISABLED_PREVIOUS_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_PREVIOUS_LINK', False)
++DISPLAY_DISABLED_NEXT_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_NEXT_LINK', False)
  
  def do_autopaginate(parser, token):
      """
      Splits the arguments to the autopaginate tag and formats them correctly.
      """
 +    
 +    # Check whether there are any other autopaginations are later in this template
 +    expr = lambda obj: (obj.token_type == TOKEN_BLOCK and \
 +        len(obj.split_contents()) > 0 and obj.split_contents()[0] == "autopaginate")
 +    multiple_paginations = len(filter(expr, parser.tokens)) > 0
 +    
      split = token.split_contents()
      as_index = None
      context_var = None
                  "context_var_name %%}" % split[0])
          del split[as_index:as_index + 2]
      if len(split) == 2:
 -        return AutoPaginateNode(split[1])
 +        return AutoPaginateNode(split[1], multiple_paginations=multiple_paginations)
      elif len(split) == 3:
          return AutoPaginateNode(split[1], paginate_by=split[2], 
 -            context_var=context_var)
 +            context_var=context_var, multiple_paginations=multiple_paginations)
      elif len(split) == 4:
          try:
              orphans = int(split[3])
@@@ -54,7 -52,7 +59,7 @@@
              raise template.TemplateSyntaxError(u'Got %s, but expected integer.'
                  % split[3])
          return AutoPaginateNode(split[1], paginate_by=split[2], orphans=orphans,
 -            context_var=context_var)
 +            context_var=context_var, multiple_paginations=multiple_paginations)
      else:
          raise template.TemplateSyntaxError('%r tag takes one required ' +
              'argument and one optional argument' % split[0])
@@@ -76,7 -74,7 +81,7 @@@ class AutoPaginateNode(template.Node)
          tag.  If you choose not to use *{% paginate %}*, make sure to display the
          list of available pages, or else the application may seem to be buggy.
      """
 -    def __init__(self, queryset_var, paginate_by=DEFAULT_PAGINATION,
 +    def __init__(self, queryset_var, multiple_paginations, paginate_by=DEFAULT_PAGINATION,
          orphans=DEFAULT_ORPHANS, context_var=None):
          self.queryset_var = template.Variable(queryset_var)
          if isinstance(paginate_by, int):
              self.paginate_by = template.Variable(paginate_by)
          self.orphans = orphans
          self.context_var = context_var
 +        self.multiple_paginations = multiple_paginations
  
      def render(self, context):
 +        if self.multiple_paginations or context.has_key('paginator'):
 +            page_suffix = '_%s' % self.queryset_var
 +        else:
 +            page_suffix = ''
 +        
          key = self.queryset_var.var
          value = self.queryset_var.resolve(context)
          if isinstance(self.paginate_by, int):
              paginate_by = self.paginate_by.resolve(context)
          paginator = Paginator(value, paginate_by, self.orphans)
          try:
 -            page_obj = paginator.page(context['request'].page)
 +            page_obj = paginator.page(context['request'].page(page_suffix))
          except InvalidPage:
              if INVALID_PAGE_RAISES_404:
                  raise Http404('Invalid page requested.  If DEBUG were set to ' +
              context[key] = page_obj.object_list
          context['paginator'] = paginator
          context['page_obj'] = page_obj
 +        context['page_suffix'] = page_suffix
          return u''
  
  
@@@ -143,12 -134,17 +148,18 @@@ def paginate(context, window=DEFAULT_WI
          A dictionary of all of the **GET** parameters in the current request.
          This is useful to maintain certain types of state, even when requesting
          a different page.
-         """
+     
+     ``pagination_template``
+         A custom template to include in place of the default ``pagination.html`` 
+         contents.
+         
+     """
      try:
          paginator = context['paginator']
          page_obj = context['page_obj']
 +        page_suffix = context.get('page_suffix', '')
          page_range = paginator.page_range
+         pagination_template = context.get('pagination_template', 'pagination/default.html')
          # Calculate the record range in the current page for display.
          records = {'first': 1 + (page_obj.number - 1) * paginator.per_page}
          records['last'] = records['first'] + paginator.per_page - 1
              'paginator': paginator,
              'hashtag': hashtag,
              'is_paginated': paginator.count > paginator.per_page,
 +            'page_suffix': page_suffix,
+             'display_page_links': DISPLAY_PAGE_LINKS,
+             'display_disabled_previous_link': DISPLAY_DISABLED_PREVIOUS_LINK,
+             'display_disabled_next_link': DISPLAY_DISABLED_NEXT_LINK,
+             'previous_link_decorator': PREVIOUS_LINK_DECORATOR,
+             'next_link_decorator': NEXT_LINK_DECORATOR,
+             'pagination_template': pagination_template,
          }
          if 'request' in context:
              getvars = context['request'].GET.copy()
 -            if 'page' in getvars:
 -                del getvars['page']
 +            if 'page%s' % page_suffix in getvars:
 +                del getvars['page%s' % page_suffix]
              if len(getvars.keys()) > 0:
                  to_return['getvars'] = "&%s" % getvars.urlencode()
              else: