diff --git a/django/contrib/admin/media/css/forms.css b/django/contrib/admin/media/css/forms.css index 468e06a8a2..01a2937b7b 100644 --- a/django/contrib/admin/media/css/forms.css +++ b/django/contrib/admin/media/css/forms.css @@ -57,4 +57,13 @@ fieldset.monospace textarea { font-family:"Bitstream Vera Sans Mono",Monaco,"Cou .vURLField { width:30em; } .vLargeTextField, .vXMLLargeTextField { width:48em; } .flatpages-flatpage #id_content { height:40.2em; } -.module table .vPositiveSmallIntegerField { width:2.2em; } \ No newline at end of file +.module table .vPositiveSmallIntegerField { width:2.2em; } + + +/* PAGINATOR */ +.paginator { padding: .25em .25em .6em .25em; } +.paginate-pages { padding: 2px 3px; border: 1px solid #ddd; cursor: pointer; text-decoration: underline; } +.paginate-first, .paginate-last { padding: 2px 6px; border: 1px solid #ddd; font-weight: bold; } +.paginate-previous, .paginate-next { padding: 2px 3px; border: 1px solid #ddd; } +.paginate-link { padding: 2px 4px; border: 1px solid #ddd; } +.paginate-current { padding: 2px 4px; border: 1px solid #ddd; font-weight: bold; background:#417690; color:#f4f379; } \ No newline at end of file diff --git a/django/contrib/admin/templates/admin/paginator.html b/django/contrib/admin/templates/admin/paginator.html new file mode 100644 index 0000000000..707dadc3b3 --- /dev/null +++ b/django/contrib/admin/templates/admin/paginator.html @@ -0,0 +1,13 @@ +{% spaceless %} +{% if show_first %}«{% endif %} +{% if has_previous %}<{% endif %} +{% for num in page_numbers %} + {% ifequal num page %} + {{ num }} + {% else %} + {{ num }} + {% endifequal %} +{% endfor %} +{% if has_next %}>{% endif %} +{% if show_last %}»{% endif %} +{% endspaceless %} \ No newline at end of file diff --git a/django/contrib/admin/templates/admin/row_level_permission.html b/django/contrib/admin/templates/admin/row_level_permission.html index 354108d66e..ee9f94c911 100644 --- a/django/contrib/admin/templates/admin/row_level_permission.html +++ b/django/contrib/admin/templates/admin/row_level_permission.html @@ -135,7 +135,10 @@ {% if is_paginated %} +{% comment %} {% if has_previous %} << {% endif %} {% if has_next %} >> {% endif %} +{% endcomment %} +
{% paginator %}
{% endif %} diff --git a/django/contrib/admin/templatetags/row_level_permission.py b/django/contrib/admin/templatetags/row_level_permission.py index edbd6e09a0..29f435a280 100644 --- a/django/contrib/admin/templatetags/row_level_permission.py +++ b/django/contrib/admin/templatetags/row_level_permission.py @@ -34,4 +34,27 @@ def objref(parser, token): tok = "object" return objref_class(tok) +def paginator(context, adjacent_pages=2): + """Adds pagination context variables for first, adjacent and next page links + in addition to those already populated by the object_list generic view.""" + page_numbers = [n for n in \ + range(context["page"] - adjacent_pages, context["page"] + adjacent_pages + 1) \ + if n > 0 and n <= context["pages"]] + print page_numbers + return { + "hits": context["hits"], + "results_per_page": context["results_per_page"], + "page": context["page"], + "pages": context["pages"], + "page_numbers": page_numbers, + "next": context["next"], + "previous": context["previous"], + "has_next": context["has_next"], + "has_previous": context["has_previous"], + "show_first": 1 not in page_numbers, + "show_last": context["pages"] not in page_numbers, + } + +register.inclusion_tag("admin/paginator.html", takes_context=True)(paginator) + register.tag('objref', objref) \ No newline at end of file diff --git a/django/contrib/admin/views/row_level_permissions.py b/django/contrib/admin/views/row_level_permissions.py index 40154780e8..f3ecf0f93a 100644 --- a/django/contrib/admin/views/row_level_permissions.py +++ b/django/contrib/admin/views/row_level_permissions.py @@ -29,12 +29,7 @@ def view_row_level_permissions(request, app_label, model_name, object_id): if not request.user.has_perm(RowLevelPermission._meta.app_label + '.' + RowLevelPermission._meta.get_change_permission()): raise PermissionDenied - #TODO: For now takes the number per page from the model instance not the RLP object - paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'), - opts.admin.list_per_page) - - page = int(request.GET.get('page', 0)) - rlp_list = paginator.get_page(page) + c = template.RequestContext(request, { 'title': _('Edit Row Level Permissions'), @@ -42,13 +37,30 @@ def view_row_level_permissions(request, app_label, model_name, object_id): 'content_type_id':model_ct.id, 'original': model_instance, 'opts':opts, + }) + + + #TODO: For now takes the number per page from the model instance not the RLP object + list_per_page = opts.admin.list_per_page + #list_per_page = 5 + paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'), + list_per_page) + page = int(request.GET.get('page', 1))-1 + rlp_list = paginator.get_page(page) + paginator_context = { "is_paginated": paginator.has_next_page(0), "has_next": paginator.has_next_page(page), "has_previous": paginator.has_previous_page(page), - "page": page + 1, - "next": page + 1, - "previous": page - 1, - }) + "page": page+1, + "next": page+2, + "previous": page, + "hits":paginator.hits, + "results_per_page":list_per_page, + "pages":paginator.pages, + "has_next":paginator.has_next_page(page), + "has_previous":paginator.has_previous_page(page), + } + c.update(paginator_context) rlp_errors = rlp_new_data = {} add_rlp_manip = AddRLPManipulator(model_instance, model_ct)