Add infinity scrolling for /domains
This commit is contained in:
parent
d97f980b66
commit
816700a63b
3 changed files with 33 additions and 24 deletions
|
|
@ -13,7 +13,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.contrib.auth.views import LoginView, LogoutView, PasswordChangeView
|
from django.contrib.auth.views import LoginView, LogoutView, PasswordChangeView
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.core.exceptions import SuspiciousOperation
|
from django.core.exceptions import SuspiciousOperation
|
||||||
from django.core.paginator import EmptyPage, Paginator
|
from django.core.paginator import EmptyPage, Page, Paginator
|
||||||
from django.db.models.manager import BaseManager
|
from django.db.models.manager import BaseManager
|
||||||
from django.http import FileResponse, Http404, HttpRequest, HttpResponse
|
from django.http import FileResponse, Http404, HttpRequest, HttpResponse
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
|
|
@ -89,11 +89,11 @@ class FeedsView(View):
|
||||||
page_number = int(request.GET.get("page", default=1))
|
page_number = int(request.GET.get("page", default=1))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
pages = paginator.get_page(page_number)
|
pages: Page = paginator.get_page(page_number)
|
||||||
except EmptyPage:
|
except EmptyPage:
|
||||||
return HttpResponse("")
|
return HttpResponse("")
|
||||||
|
|
||||||
context = {
|
context: dict[str, str | Page | int] = {
|
||||||
"feeds": pages,
|
"feeds": pages,
|
||||||
"description": "An archive of all feeds",
|
"description": "An archive of all feeds",
|
||||||
"keywords": "feed, rss, atom, archive, rss list",
|
"keywords": "feed, rss, atom, archive, rss list",
|
||||||
|
|
@ -405,19 +405,30 @@ class RobotsView(View):
|
||||||
class DomainsView(View):
|
class DomainsView(View):
|
||||||
"""All domains."""
|
"""All domains."""
|
||||||
|
|
||||||
def get(self: DomainsView, request: HttpRequest) -> HttpResponse:
|
def get(self: DomainsView, request: HtmxHttpRequest) -> HttpResponse:
|
||||||
"""Load the domains page."""
|
"""Load the domains page."""
|
||||||
domains: BaseManager[Domain] = Domain.objects.all()
|
domains: BaseManager[Domain] = Domain.objects.only("id", "url", "created_at")
|
||||||
template = loader.get_template(template_name="domains.html")
|
|
||||||
context = {
|
paginator = Paginator(object_list=domains, per_page=100)
|
||||||
"domains": domains,
|
page_number = int(request.GET.get("page", default=1))
|
||||||
|
|
||||||
|
try:
|
||||||
|
pages: Page = paginator.get_page(page_number)
|
||||||
|
except EmptyPage:
|
||||||
|
return HttpResponse("")
|
||||||
|
|
||||||
|
context: dict[str, str | Page | int] = {
|
||||||
|
"domains": pages,
|
||||||
"description": "Domains",
|
"description": "Domains",
|
||||||
"keywords": "feed, rss, atom, archive, rss list",
|
"keywords": "feed, rss, atom, archive, rss list",
|
||||||
"author": "TheLovinator",
|
"author": "TheLovinator",
|
||||||
"canonical": "https://feedvault.se/domains/",
|
"canonical": "https://feedvault.se/domains/",
|
||||||
"title": "Domains",
|
"title": "Domains",
|
||||||
|
"page": page_number,
|
||||||
}
|
}
|
||||||
return HttpResponse(content=template.render(context=context, request=request))
|
|
||||||
|
template_name = "partials/domains.html" if request.htmx else "domains.html"
|
||||||
|
return render(request, template_name, context)
|
||||||
|
|
||||||
|
|
||||||
class DomainView(View):
|
class DomainView(View):
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,5 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>Domains</h2>
|
<h2>Domains</h2>
|
||||||
<p>
|
{% include "partials/domains.html" %}
|
||||||
These are the domains that have been added to the database.
|
|
||||||
{% if domains|length > 0 %}There are {{ domains|length }} domains in the database.{% endif %}
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
{% for domain in domains %}
|
|
||||||
{% if not domain.hidden %}
|
|
||||||
<li>
|
|
||||||
<a href="{% url 'domain' domain.id %}">{{ domain.url }}</a> - {{ domain.created_at|date }}
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
|
||||||
{% empty %}
|
|
||||||
<li>Found no domains in the database.</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
12
templates/partials/domains.html
Normal file
12
templates/partials/domains.html
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{% if domains %}
|
||||||
|
{% for domain in domains %}
|
||||||
|
<a href="{% url 'domain' domain.id %}">{{ domain.url }}</a> - {{ domain.created_at|date }}
|
||||||
|
<br>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<p>No domains yet. Time to add some!</p>
|
||||||
|
{% endif %}
|
||||||
|
<div hx-get="{% url 'domains' %}?page={{ page|add:1 }}"
|
||||||
|
hx-trigger="revealed"
|
||||||
|
hx-target="this"
|
||||||
|
hx-swap="outerHTML">Loading...</div>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue