aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2019-04-19 11:36:40 +0100
committerGravatar Gareth Coles <[email protected]>2019-04-19 11:36:40 +0100
commit5e76c9ade203830c7f9a904d049dd54299a215b1 (patch)
tree6c530ba0a639b5f8859f4716778e076f9fb4dc28
parentSearching and pagination (diff)
Big pagination changes because the wiki is stupid
-rw-r--r--pydis_site/apps/home/templatetags/extra_tags.py65
-rw-r--r--pydis_site/apps/home/templatetags/wiki_extra.py4
-rw-r--r--pydis_site/templates/base/paginator.html41
-rw-r--r--pydis_site/templates/wiki/history.html4
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">&hellip;</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">&hellip;</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 %}