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.messages.views import SuccessMessageMixin
|
||||
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.http import FileResponse, Http404, HttpRequest, HttpResponse
|
||||
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))
|
||||
|
||||
try:
|
||||
pages = paginator.get_page(page_number)
|
||||
pages: Page = paginator.get_page(page_number)
|
||||
except EmptyPage:
|
||||
return HttpResponse("")
|
||||
|
||||
context = {
|
||||
context: dict[str, str | Page | int] = {
|
||||
"feeds": pages,
|
||||
"description": "An archive of all feeds",
|
||||
"keywords": "feed, rss, atom, archive, rss list",
|
||||
|
|
@ -405,19 +405,30 @@ class RobotsView(View):
|
|||
class DomainsView(View):
|
||||
"""All domains."""
|
||||
|
||||
def get(self: DomainsView, request: HttpRequest) -> HttpResponse:
|
||||
def get(self: DomainsView, request: HtmxHttpRequest) -> HttpResponse:
|
||||
"""Load the domains page."""
|
||||
domains: BaseManager[Domain] = Domain.objects.all()
|
||||
template = loader.get_template(template_name="domains.html")
|
||||
context = {
|
||||
"domains": domains,
|
||||
domains: BaseManager[Domain] = Domain.objects.only("id", "url", "created_at")
|
||||
|
||||
paginator = Paginator(object_list=domains, per_page=100)
|
||||
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",
|
||||
"keywords": "feed, rss, atom, archive, rss list",
|
||||
"author": "TheLovinator",
|
||||
"canonical": "https://feedvault.se/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):
|
||||
|
|
|
|||
|
|
@ -1,19 +1,5 @@
|
|||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<h2>Domains</h2>
|
||||
<p>
|
||||
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>
|
||||
{% include "partials/domains.html" %}
|
||||
{% 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