#  Based on: http://www.djangosnippets.org/snippets/73/
#
#  Modified by Sean Reifschneider to be smarter about surrounding page
#  link context.  For usage documentation see:
#
#     http://www.tummy.com/Community/Articles/django-pagination/

from django import template

register = template.Library()


def paginator(context, adjacent_pages=1):
    """
    To be used in conjunction with the object_list generic view.

    Adds pagination context variables for use in displaying first, adjacent and
    last page links in addition to those created by the object_list generic
    view.

    """
    if "page_obj" in context:
        page_obj = context["page_obj"]
        paginator = context["paginator"]
        startPage = max(page_obj.number - adjacent_pages, 1)
        if startPage <= 3:
            startPage = 1
        endPage = page_obj.number + adjacent_pages + 1
        if endPage >= paginator.num_pages - 1:
            endPage = paginator.num_pages + 1
        page_numbers = [
            n for n in range(startPage, endPage) if n > 0 and n <= paginator.num_pages
        ]

        context["page_numbers"] = page_numbers
        context["show_first"] = 1 not in page_numbers
        context["show_last"] = paginator.num_pages not in page_numbers
        return context
    else:
        return {}


register.inclusion_tag("snippets/pagination.html", takes_context=True)(paginator)
