Compare commits
1 commit
main
...
add-histor
Author | SHA1 | Date | |
---|---|---|---|
|
39b1cc75e3 |
6 changed files with 121 additions and 114 deletions
|
@ -1,22 +1,95 @@
|
||||||
|
{% load django_vite %}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<!-- Metas -->
|
||||||
<title>{% block title %}Simple is Better Than Complex{% endblock %}</title>
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
{% include "title.html" %}
|
||||||
|
<meta name="description" content="The free, open-source and non-profit search engine.">
|
||||||
|
|
||||||
|
<!-- Favicons -->
|
||||||
|
<link rel="icon" href="/static/images/favicon.svg" type="image/svg+xml">
|
||||||
|
|
||||||
|
<!-- Fonts import -->
|
||||||
|
<link rel="preload" href="/static/fonts/inter/inter.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||||
|
<noscript>
|
||||||
|
<link rel="stylesheet" href="/static/fonts/inter/inter.css">
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
<!-- CSS Stylesheets (this is critical CSS) -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/css/reset.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/css/theme.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/css/global.css">
|
||||||
|
|
||||||
|
<!-- Phosphor Icons (https://github.com/phosphor-icons/phosphor-home) -->
|
||||||
|
<link rel="preload" href="/static/fonts/phosphor/icons.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||||
|
<noscript>
|
||||||
|
<link rel="stylesheet" href="/static/fonts/phosphor/icons.css">
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
<!-- Custom Element Polyfill for Safari -->
|
||||||
|
<script src="https://unpkg.com/@ungap/custom-elements" type="module"></script>
|
||||||
|
|
||||||
|
<!-- OpenSearch -->
|
||||||
|
<link rel="search" type="application/opensearchdescription+xml" href="/static/assets/opensearch.xml" title="Mwmbl Search">
|
||||||
|
|
||||||
|
<script src="https://unpkg.com/htmx.org@1.9.6"></script>
|
||||||
|
|
||||||
|
{% vite_hmr_client %}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<mwmbl-app></mwmbl-app>
|
||||||
<h1>My Site</h1>
|
<header class="search-menu compact">
|
||||||
|
<a href="/" class="branding">
|
||||||
|
<img class="brand-icon" src="/static/images/logo.svg" width="40" height="40" alt="mwmbl logo">
|
||||||
|
<span class="brand-title">Mwmbl</span>
|
||||||
|
</a>
|
||||||
|
<form class="search-bar">
|
||||||
|
<i class="ph-magnifying-glass-bold"></i>
|
||||||
|
<input
|
||||||
|
type='search'
|
||||||
|
name='q'
|
||||||
|
class='search-bar-input'
|
||||||
|
placeholder='Search on Mwmbl...'
|
||||||
|
title='Use "CTRL+K" or "/" to focus.'
|
||||||
|
autocomplete='off'
|
||||||
|
value='{{ query|default_if_none:"" }}'
|
||||||
|
hx-get="/app/home/"
|
||||||
|
hx-trigger="keyup changed delay:100ms"
|
||||||
|
hx-target=".main"
|
||||||
|
>
|
||||||
|
</form>
|
||||||
|
<div is="mwmbl-save"></div>
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<a href="{% url 'account_logout' %}">logout</a>
|
<p class="login-info">Logged in as {{ user.username }}</p>
|
||||||
|
<a class="button" href="/accounts/logout/">Log out</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="{% url 'account_login' %}">login</a> / <a href="{% url 'signup' %}">signup</a>
|
<a class="button" href="/accounts/login/">Login</a>
|
||||||
|
<a class="button" href="/accounts/signup/">Sign up</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<hr>
|
|
||||||
</header>
|
</header>
|
||||||
<main>
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</main>
|
<div class="footer">
|
||||||
|
<ul class="footer-list">
|
||||||
|
{% for link in footer_links %}
|
||||||
|
<li class="footer-item">
|
||||||
|
<a href="{{ link.href }}" class="footer-link" target="__blank">
|
||||||
|
<i class="{{ link.icon }}"></i>
|
||||||
|
<span>{{ link.name }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% vite_asset 'index.js' %}
|
||||||
|
{% vite_legacy_polyfills %}
|
||||||
|
{% vite_legacy_asset 'index-legacy.js' %}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
11
mwmbl/templates/history.html
Normal file
11
mwmbl/templates/history.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% load humanize %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="main">
|
||||||
|
<h1>Curations for <a href="{{ url }}">{{ query }}</a></h1>
|
||||||
|
{% for user_curation in curations %}
|
||||||
|
<p>{{ user_curation.user.username }} {{ user_curation.curation_type }} {{ user_curation.timestamp | naturaltime}}</p>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -3,6 +3,7 @@
|
||||||
<div class="main">
|
<div class="main">
|
||||||
{% if query %}
|
{% if query %}
|
||||||
<button class="button curate-add" is="mwmbl-add-button">+ Add new</button>
|
<button class="button curate-add" is="mwmbl-add-button">+ Add new</button>
|
||||||
|
{# <a href="{% url "history:url" %}" class="button curate-add">View history</a>#}
|
||||||
{% if results %}
|
{% if results %}
|
||||||
<ul class='results'>
|
<ul class='results'>
|
||||||
{% for result in results %}
|
{% for result in results %}
|
||||||
|
|
|
@ -1,97 +1,6 @@
|
||||||
{% load django_vite %}
|
{% extends "base.html" %}
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<head>
|
{% block content %}
|
||||||
<!-- Metas -->
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
|
|
||||||
{% include "title.html" %}
|
|
||||||
<meta name="description" content="The free, open-source and non-profit search engine.">
|
|
||||||
|
|
||||||
<!-- Favicons -->
|
|
||||||
<link rel="icon" href="/static/images/favicon.svg" type="image/svg+xml">
|
|
||||||
|
|
||||||
<!-- Fonts import -->
|
|
||||||
<link rel="preload" href="/static/fonts/inter/inter.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
|
||||||
<noscript>
|
|
||||||
<link rel="stylesheet" href="/static/fonts/inter/inter.css">
|
|
||||||
</noscript>
|
|
||||||
|
|
||||||
<!-- CSS Stylesheets (this is critical CSS) -->
|
|
||||||
<link rel="stylesheet" type="text/css" href="/static/css/reset.css">
|
|
||||||
<link rel="stylesheet" type="text/css" href="/static/css/theme.css">
|
|
||||||
<link rel="stylesheet" type="text/css" href="/static/css/global.css">
|
|
||||||
|
|
||||||
<!-- Phosphor Icons (https://github.com/phosphor-icons/phosphor-home) -->
|
|
||||||
<link rel="preload" href="/static/fonts/phosphor/icons.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
|
||||||
<noscript>
|
|
||||||
<link rel="stylesheet" href="/static/fonts/phosphor/icons.css">
|
|
||||||
</noscript>
|
|
||||||
|
|
||||||
<!-- Custom Element Polyfill for Safari -->
|
|
||||||
<script src="https://unpkg.com/@ungap/custom-elements" type="module"></script>
|
|
||||||
|
|
||||||
<!-- OpenSearch -->
|
|
||||||
<link rel="search" type="application/opensearchdescription+xml" href="/static/assets/opensearch.xml" title="Mwmbl Search">
|
|
||||||
|
|
||||||
<script src="https://unpkg.com/htmx.org@1.9.6"></script>
|
|
||||||
|
|
||||||
{% vite_hmr_client %}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<mwmbl-app></mwmbl-app>
|
|
||||||
<header class="search-menu compact">
|
|
||||||
<a href="/" class="branding">
|
|
||||||
<img class="brand-icon" src="/static/images/logo.svg" width="40" height="40" alt="mwmbl logo">
|
|
||||||
<span class="brand-title">Mwmbl</span>
|
|
||||||
</a>
|
|
||||||
<form class="search-bar">
|
|
||||||
<i class="ph-magnifying-glass-bold"></i>
|
|
||||||
<input
|
|
||||||
type='search'
|
|
||||||
name='q'
|
|
||||||
class='search-bar-input'
|
|
||||||
placeholder='Search on Mwmbl...'
|
|
||||||
title='Use "CTRL+K" or "/" to focus.'
|
|
||||||
autocomplete='off'
|
|
||||||
value='{{ query|default_if_none:"" }}'
|
|
||||||
hx-get="/app/home/"
|
|
||||||
hx-trigger="keyup changed delay:100ms"
|
|
||||||
hx-target=".main"
|
|
||||||
>
|
|
||||||
</form>
|
|
||||||
<div is="mwmbl-save"></div>
|
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<p class="login-info">Logged in as {{ user.username }}</p>
|
|
||||||
<a class="button" href="/accounts/logout/">Log out</a>
|
|
||||||
{% else %}
|
|
||||||
<a class="button" href="/accounts/login/">Login</a>
|
|
||||||
<a class="button" href="/accounts/signup/">Sign up</a>
|
|
||||||
{% endif %}
|
|
||||||
</header>
|
|
||||||
<main>
|
|
||||||
{% include "home.html" %}
|
{% include "home.html" %}
|
||||||
</main>
|
|
||||||
<div is="mwmbl-add-result"></div>
|
<div is="mwmbl-add-result"></div>
|
||||||
<div class="footer">
|
{% endblock %}
|
||||||
<ul class="footer-list">
|
|
||||||
{% for link in footer_links %}
|
|
||||||
<li class="footer-item">
|
|
||||||
<a href="{{ link.href }}" class="footer-link" target="__blank">
|
|
||||||
<i class="{{ link.icon }}"></i>
|
|
||||||
<span>{{ link.name }}</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{% vite_asset 'index.js' %}
|
|
||||||
{% vite_legacy_polyfills %}
|
|
||||||
{% vite_legacy_asset 'index-legacy.js' %}
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ from django.contrib import admin
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
|
|
||||||
from mwmbl.api import api_v1
|
from mwmbl.api import api_v1
|
||||||
from mwmbl.views import home_fragment, fetch_url, index
|
from mwmbl.views import home_fragment, fetch_url, index, page_history
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
|
@ -27,5 +27,6 @@ urlpatterns = [
|
||||||
|
|
||||||
path('', index, name="home"),
|
path('', index, name="home"),
|
||||||
path('app/home/', home_fragment, name="home"),
|
path('app/home/', home_fragment, name="home"),
|
||||||
path('app/fetch/', fetch_url, name="fetch_url")
|
path('app/fetch/', fetch_url, name="fetch_url"),
|
||||||
|
path('app/history/', page_history, name="history"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -127,3 +127,15 @@ def fetch_url(request):
|
||||||
return render(request, "result.html", {
|
return render(request, "result.html", {
|
||||||
"result": format_result(result, query),
|
"result": format_result(result, query),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def page_history(request):
|
||||||
|
url = request.GET["url"]
|
||||||
|
parsed_url_query = parse_qs(urlparse(url).query)
|
||||||
|
query = parsed_url_query.get("q", [""])[0]
|
||||||
|
curations = UserCuration.objects.filter(url=url).order_by("-timestamp")
|
||||||
|
return render(request, "history.html", {
|
||||||
|
"curations": curations,
|
||||||
|
"url": url,
|
||||||
|
"query": query,
|
||||||
|
})
|
||||||
|
|
Loading…
Reference in a new issue