Revamps search page

still needs to expand user search to do database lookups
This commit is contained in:
Mouse Reeve 2020-10-14 09:19:23 -07:00
parent a6d436d05d
commit 4ba9b7a119
3 changed files with 62 additions and 13 deletions

View file

@ -0,0 +1,45 @@
{% extends 'layout.html' %}
{% block content %}
<div class="block columns">
<div class="column">
<h2 class="title">Matching Books</h2>
{% for result_set in book_results %}
{% if result_set.results %}
<section>
{% if not result_set.connector.local %}
<h3>
Results from <a href="{{ result_set.connector.base_url }}" target="_blank">{% if result_set.connector.name %}{{ result_set.connector.name }}{% else %}{{ result_set.connector.identifier }}{% endif %}</a>
</h3>
{% endif %}
{% for result in result_set.results %}
<div>
<form action="/resolve_book" method="POST">
{% csrf_token %}
<input type="hidden" name="remote_id" value="{{ result.key }}">
<button type="submit">{{ result.title }} by {{ result.author }} ({{ result.year }})</button>
</form>
</div>
{% endfor %}
</section>
{% endif %}
{% endfor %}
{% if not results %}
<p>No books found for "{{ query }}"</p>
{% endif %}
</div>
<div class="column">
<h2 class="title">Matching Users</h2>
{% if not user_results %}
<p>No users found for "{{ query }}"</p>
{% endif %}
{% for result in user_results %}
<div class="block">
{% include 'snippets/avatar.html' with user=result %}</h2>
{% include 'snippets/username.html' with user=result show_full=True %}</h2>
{% include 'snippets/follow_button.html' with user=result %}
</div>
{% endfor %}
</div>
</div>
{% endblock %}

View file

@ -6,6 +6,7 @@
<p>No results found for "{{ query }}"</p>
{% endif %}
{% for result in results %}
{{ result }}
<div class="block">
{% include 'snippets/avatar.html' with user=result %}</h2>
{% include 'snippets/username.html' with user=result show_full=True %}</h2>

View file

@ -147,22 +147,25 @@ def get_activity_feed(user, filter_level, model=models.Status):
def search(request):
''' that search bar up top '''
query = request.GET.get('q')
if re.match(r'\w+@\w+.\w+', query):
# if something looks like a username, search with webfinger
results = outgoing.handle_account_search(query)
return TemplateResponse(
request, 'user_results.html', {'results': results, 'query': query}
)
# or just send the question over to book search
if is_api_request(request):
# only return local results via json so we don't cause a cascade
results = books_manager.local_search(query)
return JsonResponse([r.__dict__ for r in results], safe=False)
# only return local book results via json so we don't cause a cascade
book_results = books_manager.local_search(query)
return JsonResponse([r.__dict__ for r in book_results], safe=False)
results = books_manager.search(query)
return TemplateResponse(request, 'book_results.html', {'results': results})
user_results = []
# use webfinger looks like a mastodon style account@domain.com username
if re.match(r'\w+@\w+.\w+', query):
# if something looks like a username, search with webfinger
user_results = outgoing.handle_remote_webfinger(query)
book_results = books_manager.search(query)
data = {
'book_results': book_results,
'user_results': user_results,
'query': query,
}
return TemplateResponse(request, 'search_results.html', data)
@login_required