diff options
Diffstat (limited to 'pydis_site')
| -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 %}  |