diff options
author | 2019-04-19 11:36:40 +0100 | |
---|---|---|
committer | 2019-04-19 11:36:40 +0100 | |
commit | 5e76c9ade203830c7f9a904d049dd54299a215b1 (patch) | |
tree | 6c530ba0a639b5f8859f4716778e076f9fb4dc28 | |
parent | Searching and pagination (diff) |
Big pagination changes because the wiki is stupid
-rw-r--r-- | pydis_site/apps/home/templatetags/extra_tags.py | 65 | ||||
-rw-r--r-- | pydis_site/apps/home/templatetags/wiki_extra.py | 4 | ||||
-rw-r--r-- | pydis_site/templates/base/paginator.html | 41 | ||||
-rw-r--r-- | pydis_site/templates/wiki/history.html | 4 |
4 files changed, 91 insertions, 23 deletions
diff --git a/pydis_site/apps/home/templatetags/extra_tags.py b/pydis_site/apps/home/templatetags/extra_tags.py new file mode 100644 index 00000000..a4da1742 --- /dev/null +++ b/pydis_site/apps/home/templatetags/extra_tags.py @@ -0,0 +1,65 @@ +from urllib.parse import urlparse, ParseResult, urlunparse + +from django.template import Context, Library +from django.urls import resolve, reverse, NoReverseMatch + +register = Library() + + [email protected]_tag(takes_context=True) +def url_extend(context: Context, *args, **kwargs): + current_url = context["request"].get_full_path() + resolved = resolve(current_url) + + url = resolved.url_name + app_name = resolved.app_name + + try: + _args = resolved.args + _kwargs = resolved.kwargs.copy() + + _args += args + _kwargs.update(kwargs) + + if app_name: + pattern = f"{app_name}:{url}" + else: + pattern = url + + return reverse(pattern, args=_args, kwargs=_kwargs) + except NoReverseMatch: + _args = resolved.args + _kwargs = resolved.kwargs.copy() + + if app_name: + pattern = f"{app_name}:{url}" + else: + pattern = url + + reversed_url = reverse(pattern, args=_args, kwargs=_kwargs) + parsed: ParseResult = urlparse(reversed_url) + + params = parsed.params + + if params: + params += f"&" + else: + params = "?" + + params += "&".join(args) + kwarg_list = [] + + for key, value in kwargs.items(): + kwarg_list.append(f"{key}={value}") + + params += "&".join(kwarg_list) + + parsed = ParseResult( + parsed.scheme, parsed.netloc, parsed.path, + "", parsed.query, parsed.fragment + ) + + unparsed = urlunparse(parsed) + params + print(parsed) + print(unparsed) + return unparsed diff --git a/pydis_site/apps/home/templatetags/wiki_extra.py b/pydis_site/apps/home/templatetags/wiki_extra.py index 63d9bade..58612cc8 100644 --- a/pydis_site/apps/home/templatetags/wiki_extra.py +++ b/pydis_site/apps/home/templatetags/wiki_extra.py @@ -6,7 +6,7 @@ from django.forms import ( EmailField, Field, FileField, FilePathField, FloatField, GenericIPAddressField, ImageField, IntegerField, ModelChoiceField, ModelMultipleChoiceField, MultiValueField, MultipleChoiceField, NullBooleanField, RegexField, SlugField, SplitDateTimeField, TimeField, TypedChoiceField, TypedMultipleChoiceField, URLField, UUIDField) -from django.template import Template +from django.template import Template, Context from django.template.loader import get_template from django.utils.safestring import mark_safe from wiki.editors.markitup import MarkItUpWidget @@ -86,7 +86,7 @@ def render_field(field: Field, render_labels: bool = True): @register.simple_tag(takes_context=True) -def get_field_options(context, field: BoundField): +def get_field_options(context: Context, field: BoundField): widget = field.field.widget if field.value() is None: diff --git a/pydis_site/templates/base/paginator.html b/pydis_site/templates/base/paginator.html index 8eaa37ee..9cf031f0 100644 --- a/pydis_site/templates/base/paginator.html +++ b/pydis_site/templates/base/paginator.html @@ -1,27 +1,28 @@ +{% load extra_tags %} {% comment %} This template inserts a Bulma paginator wherever one is required. Simply include it as follows: -{% include "base/paginator.html" with page=paginator_object %} +{% include "base/paginator.html" with page_obj=paginator_object %} {% endcomment %} <nav class="pagination" role="navigation" aria-label="pagination"> - {% if page.has_previous %} - <a class="pagination-previous" href="{% url "blog.posts" page=page.previous_page_number %}">Newer</a> + {% if page_obj.has_previous %} + <a class="pagination-previous" href="{% url_extend page=page_obj.previous_page_number %}">Newer</a> {% else %} <a class="pagination-previous" title="This is the first page" disabled>Newer</a> {% endif %} - {% if page.has_next %} - <a class="pagination-next" href="{% url "" page=1 %}">Older</a> + {% if page_obj.has_next %} + <a class="pagination-next" href="{% url_extend page=1 %}">Older</a> {% else %} <a class="pagination-next" title="This is the last page" disabled>Older</a> {% endif %} <ul class="pagination-list"> - {% if page.has_previous %} + {% if page_obj.has_previous %} <li> <a class="pagination-link" aria-label="Goto page 1" - href="{% url "blog.posts" page=1 %}"> + href="{% url_extend page=1 %}"> 1 </a> </li> @@ -29,34 +30,34 @@ This template inserts a Bulma paginator wherever one is required. Simply include <span class="pagination-ellipsis">…</span> </li> <li> - <a class="pagination-link" aria-label="Goto page {{ page.previous_page_number }}" - href="{% url "blog.posts" page=page.previous_page_number %}"> - {{ page.previous_page_number }} + <a class="pagination-link" aria-label="Goto page {{ page_obj.previous_page_number }}" + href="{% url_extend page=page_obj.previous_page_number %}"> + {{ page_obj.previous_page_number }} </a> </li> {% endif %} <li> - <a class="pagination-link is-current" aria-label="Page {{ page.number }}" aria-current="page" - href="{% url "blog.posts" page=page.number %}"> - {{ page.number }} + <a class="pagination-link is-current" aria-label="Page {{ page_obj.number }}" aria-current="page" + href="{% url_extend page=page_obj.number %}"> + {{ page_obj.number }} </a> </li> - {% if page.has_next %} + {% if page_obj.has_next %} <li> - <a class="pagination-link" aria-label="Goto page {{ page.next_page_number }}" - href="{% url "blog.posts" page=page.next_page_number %}"> - {{ page.next_page_number }} + <a class="pagination-link" aria-label="Goto page {{ page_obj.next_page_number }}" + href="{% url_extend page=page_obj.next_page_number %}"> + {{ page_obj.next_page_number }} </a> </li> <li> <span class="pagination-ellipsis">…</span> </li> <li> - <a class="pagination-link" aria-label="Goto page {{ page.paginator.num_pages }}" - href="{% url "blog.posts" page=page.paginator.num_pages %}"> - {{ page.paginator.num_pages }} + <a class="pagination-link" aria-label="Goto page {{ page_obj.paginator.num_pages }}" + href="{% url_extend page=page_obj.paginator.num_pages %}"> + {{ page_obj.paginator.num_pages }} </a> </li> {% endif %} diff --git a/pydis_site/templates/wiki/history.html b/pydis_site/templates/wiki/history.html index d0a0d868..afc6eafe 100644 --- a/pydis_site/templates/wiki/history.html +++ b/pydis_site/templates/wiki/history.html @@ -118,8 +118,10 @@ </div> {% endfor %} + {% include "wiki/includes/pagination.html" %} + {% if is_paginated %} - {% include "base/paginator.html" with page=page_obj %} + {% include "base/paginator.html" %} {% endif %} {% if revisions.count > 1 and article|can_write:user and not article.current_revision.locked %} |