mirror of
https://github.com/ArchiveBox/ArchiveBox
synced 2024-11-10 14:44:18 +00:00
search view inherits from modified public view
This commit is contained in:
parent
948b2469f6
commit
c50af04cce
3 changed files with 70 additions and 13 deletions
|
@ -5,7 +5,7 @@ from django.views import static
|
|||
from django.conf import settings
|
||||
from django.views.generic.base import RedirectView
|
||||
|
||||
from core.views import MainIndex, OldIndex, LinkDetails, PublicArchiveView
|
||||
from core.views import MainIndex, OldIndex, LinkDetails, PublicArchiveView, SearchResultsView
|
||||
|
||||
|
||||
# print('DEBUG', settings.DEBUG)
|
||||
|
@ -31,5 +31,6 @@ urlpatterns = [
|
|||
path('index.html', RedirectView.as_view(url='/')),
|
||||
path('index.json', static.serve, {'document_root': settings.OUTPUT_DIR, 'path': 'index.json'}),
|
||||
path('', MainIndex.as_view(), name='Home'),
|
||||
path('public/', PublicArchiveView.as_view())
|
||||
path('public/', PublicArchiveView.as_view(), name='public-index'),
|
||||
path('search_results/', SearchResultsView.as_view(), name='search-results'),
|
||||
]
|
||||
|
|
|
@ -3,9 +3,12 @@ __package__ = 'archivebox.core'
|
|||
from django.shortcuts import render, redirect
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.db.models import Q
|
||||
from django.views import View, static
|
||||
from django.views.generic.list import ListView
|
||||
|
||||
from django_datatables_view.base_datatable_view import BaseDatatableView
|
||||
|
||||
from core.models import Snapshot
|
||||
|
||||
from ..index import load_main_index, load_main_index_meta
|
||||
|
@ -107,9 +110,35 @@ class LinkDetails(View):
|
|||
class PublicArchiveView(ListView):
|
||||
template = 'snapshot_list.html'
|
||||
model = Snapshot
|
||||
context_object_name = 'links'
|
||||
paginate_by = 2
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
context = super(PublicArchiveView, self).get_context_data(*args, **kwargs)
|
||||
context['links'] = [snapshot.as_link for snapshot in Snapshot.objects.all()]
|
||||
return context
|
||||
paginate_by = 50
|
||||
|
||||
def get_queryset(self, *args, **kwargs):
|
||||
qs = super(PublicArchiveView, self).get_queryset(*args, **kwargs)
|
||||
for snapshot in qs:
|
||||
snapshot.canonical_outputs = snapshot.as_link().canonical_outputs()
|
||||
return qs
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
if PUBLIC_INDEX or self.request.user.is_authenticated:
|
||||
response = super().get(*args, **kwargs)
|
||||
return response
|
||||
else:
|
||||
return redirect(f'/admin/login/?next={self.request.path}')
|
||||
|
||||
# should we use it?
|
||||
class SnapshotDatatableView(BaseDatatableView):
|
||||
model = Snapshot
|
||||
columns = ['url', 'timestamp', 'title', 'tags', 'added']
|
||||
|
||||
def filter_queryset(self, qs):
|
||||
sSearch = self.request.GET.get('sSearch', None)
|
||||
if sSearch:
|
||||
qs = qs.filter(Q(title__icontains=sSearch))
|
||||
return qs
|
||||
|
||||
class SearchResultsView(PublicArchiveView):
|
||||
def get_queryset(self, *args, **kwargs):
|
||||
qs = super(PublicArchiveView, self).get_queryset(*args, **kwargs)
|
||||
query = self.request.GET.get('q')
|
||||
results = qs.filter(title__icontains=query)
|
||||
return results
|
|
@ -202,6 +202,8 @@
|
|||
}, true)
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('#table-bookmarks').DataTable({
|
||||
searching: false,
|
||||
paging: false,
|
||||
stateSave: true, // save state (filtered input, number of entries shown, etc) in localStorage
|
||||
dom: '<lf<t>ip>', // how to show the table and its helpers (filter, etc) in the DOM
|
||||
order: [[0, 'desc']],
|
||||
|
@ -209,14 +211,14 @@
|
|||
});
|
||||
});
|
||||
</script>
|
||||
<base href="{% url 'Home' %}" target="_blank">
|
||||
<base href="{% url 'Home' %}">
|
||||
</head>
|
||||
<body data-status="finished">
|
||||
<header>
|
||||
<div class="header-top container-fluid">
|
||||
<div class="row nav">
|
||||
<div class="col-sm-2">
|
||||
<a href="/" class="header-archivebox" title="Last updated: {{updated}}">
|
||||
<a href="{% url 'public-index' %}" class="header-archivebox" title="Last updated: {{updated}}">
|
||||
<img src="{% static 'archive.png' %}" alt="Logo"/>
|
||||
ArchiveBox: Index
|
||||
</a>
|
||||
|
@ -229,7 +231,14 @@
|
|||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<table id="table-bookmarks">
|
||||
<br>
|
||||
<form action="{% url 'search-results' %}" method="get">
|
||||
<input name="q" type="text" placeholder="Search...">
|
||||
<button type="submit">Search</button>
|
||||
<button onclick="location.href='{% url 'public-index' %}'" type="button">
|
||||
Reload Index</button>
|
||||
</form>
|
||||
<table id="table-bookmarks">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 100px;">Bookmarked</th>
|
||||
|
@ -239,9 +248,9 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for link in links %}
|
||||
{% for link in object_list %}
|
||||
<tr>
|
||||
<td title="{{link.timestamp}}">{{link.bookmarked_date}}</td>
|
||||
<td title="{{link.timestamp}}">{{link.added}}</td>
|
||||
<td class="title-col">
|
||||
{% if link.is_archived %}
|
||||
<a href="archive/{{link.timestamp}}/index.html"><img src="archive/{{link.timestamp}}/favicon.ico" class="link-favicon" decoding="async"></a>
|
||||
|
@ -263,6 +272,24 @@
|
|||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<center>
|
||||
<span class="step-links">
|
||||
{% if page_obj.has_previous %}
|
||||
<a href="{% url 'public-index' %}?page=1">« first</a>
|
||||
<a href="{% url 'public-index' %}?page={{ page_obj.previous_page_number }}">previous</a>
|
||||
{% endif %}
|
||||
|
||||
<span class="current">
|
||||
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
|
||||
</span>
|
||||
|
||||
{% if page_obj.has_next %}
|
||||
<a href="{% url 'public-index' %}?page={{ page_obj.next_page_number }}">next </a>
|
||||
<a href="{% url 'public-index' %}?page={{ page_obj.paginator.num_pages }}">last »</a>
|
||||
{% endif %}
|
||||
</span>
|
||||
<br>
|
||||
</center>
|
||||
<footer>
|
||||
<br/>
|
||||
<center>
|
||||
|
|
Loading…
Reference in a new issue